Undefined reference to `typeinfo for llvm::cl::GenericOptionValue'

I am trying to build an out of tree tool I am working on as part of CIRCT, but when I define a command line option, I get the above error.

I had some trouble building and installing LLVM, and I suspect I haven’t set up my CMakeLists properly. I really don’t know where to start debugging this, if anyone has some suggestions I would really appreciate it!

1 Like

Hi Nicholas,

A quick grep suggests me you need to link LLVMSupport into your application.

Hope this helps. Best regards,
Thomas

Hello Thomas! ty for the reply :slight_smile:

Unfortunately (I think) I have already added it :

target_link_libraries(alpaca LLVMSupport LLVMPasses LLVMCore LLVMIRReader MLIRIR)

and the here is the full debug output (shows LLVMSupport) :

[build] FAILED: alpaca 
[build] : && /usr/bin/clang++-17 -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -O3 -DNDEBUG  CMakeFiles/alpaca.dir/main.cpp.o CMakeFiles/alpaca.dir/src/UFGenerator.cpp.o CMakeFiles/alpaca.dir/src/InstructionParser.cpp.o -o alpaca -L/usr/local/lib   -L/usr/local/include -Wl,-rpath,/usr/local/lib:/usr/local/include  /usr/local/lib/libLLVMSupport.a  /usr/local/lib/libLLVMPasses.a  /usr/local/lib/libLLVMCore.a  /usr/local/lib/libLLVMIRReader.a  /usr/local/lib/libMLIRIR.a  /usr/local/lib/libLLVMCodeGen.a  /usr/local/lib/libLLVMCodeGenTypes.a  /usr/local/lib/libLLVMCoroutines.a  /usr/local/lib/libLLVMipo.a  /usr/local/lib/libLLVMBitWriter.a  /usr/local/lib/libLLVMFrontendOpenMP.a  /usr/local/lib/libLLVMLinker.a  /usr/local/lib/libLLVMIRPrinter.a  /usr/local/lib/libLLVMObjCARCOpts.a  /usr/local/lib/libLLVMScalarOpts.a  /usr/local/lib/libLLVMAggressiveInstCombine.a  /usr/local/lib/libLLVMInstCombine.a  /usr/local/lib/libLLVMTarget.a  /usr/local/lib/libLLVMVectorize.a  /usr/local/lib/libLLVMInstrumentation.a  /usr/local/lib/libLLVMTransformUtils.a  /usr/local/lib/libLLVMAnalysis.a  /usr/local/lib/libLLVMProfileData.a  /usr/local/lib/libLLVMSymbolize.a  /usr/local/lib/libLLVMDebugInfoPDB.a  /usr/local/lib/libLLVMDebugInfoMSF.a  /usr/local/lib/libLLVMDebugInfoDWARF.a  /usr/local/lib/libLLVMObject.a  /usr/local/lib/libLLVMIRReader.a  /usr/local/lib/libLLVMAsmParser.a  /usr/local/lib/libLLVMBitReader.a  /usr/local/lib/libLLVMCore.a  /usr/local/lib/libLLVMRemarks.a  /usr/local/lib/libLLVMBitstreamReader.a  /usr/local/lib/libLLVMMCParser.a  /usr/local/lib/libLLVMTextAPI.a  /usr/local/lib/libLLVMMC.a  /usr/local/lib/libLLVMBinaryFormat.a  /usr/local/lib/libLLVMTargetParser.a  /usr/local/lib/libLLVMDebugInfoCodeView.a  /usr/local/lib/libMLIRSupport.a  /usr/local/lib/libLLVMSupport.a  -lrt  -ldl  -lm  /usr/lib/x86_64-linux-gnu/libz.so  /usr/lib/x86_64-linux-gnu/libtinfo.so  /usr/local/lib/libLLVMDemangle.a && :
[build] /usr/bin/ld: CMakeFiles/alpaca.dir/main.cpp.o:(.data.rel.ro._ZTIN4llvm2cl15OptionValueCopyIbEE[_ZTIN4llvm2cl15OptionValueCopyIbEE]+0x10): undefined reference to `typeinfo for llvm::cl::GenericOptionValue'
[build] clang++-17: error: linker command failed with exit code 1 (use -v to see invocation)
[build] ninja: build stopped: subcommand failed.
[proc] The command: /usr/local/bin/cmake --build /home/fry/stage/ALPACA/build --config Release --target all -- exited with code: 1
[driver] Build completed: 00:00:00.195
[build] Build finished with exit code 1

typeinfo errors in general hint that LLVM is built without RTTI (the default) and your client code is built with it.

1 Like

Exactly that, worked like a charm!

Thank you so much :smiley:

FYI I just added this, idk if there is a better way:

set(NO_RTTI "-fno-rtti")
add_definitions(${NO_RTTI})