Fix: error adding symbols: DSO missing from command line
Compile error:
$ cmake ..
$ make
...
[ 37%] Linking CXX executable CGroupTest
/usr/bin/ld: /usr/lib64/libLLVMBPFAsmParser.a(BPFAsmParser.cpp.o): undefined reference to symbol '_ZSt21__glibcxx_assert_failPKciS0_S0_@@LLVM_14'
/usr/bin/ld: /usr/lib64/libLLVM-14.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [examples/cpp/CMakeFiles/CGroupTest.dir/build.make:163: examples/cpp/CGroupTest] Error 1
make[1]: *** [CMakeFiles/Makefile2:1013: examples/cpp/CMakeFiles/CGroupTest.dir/all] Error 2
make: *** [Makefile:146: all] Error 2
Need '-shared' during compile.
@rnsanchez Could you please check if this patch fix your issue #4214 ?
Totally same https://github.com/iovisor/bcc/issues/4214
@rnsanchez Could you please check if this patch fix your issue #4214 ?
Fix confirmed with the patch!
We cannot just add shared flag in compiler command line. This needs more testing. For the time being, bcc has this cmake option -DENABLE_LLVM_SHARED=ON you can use to build your own bcc. Hopefully it should work.
Yes, thanks a lot. actually, i always compile with -DENABLE_LLVM_SHARED=ON, does @rnsanchez still have this problem, or just close this PR?
Yes, thanks a lot. actually, i always compile with
-DENABLE_LLVM_SHARED=ON, does @rnsanchez still have this problem, or just close this PR?
For me, your proposed patch did the trick for my environment: https://github.com/iovisor/bcc/commit/b09d91d2196eebbe7d89ffcfbab4133fb5dc9abf
I understand this is not a proper fix considering different environments (i.e., it did work for me but may break someone else's).
Using -DENABLE_LLVM_SHARED=ON didn't help much. For reasons I do not fully comprehend, LLVM shipped in Slackware is split in multiple libs (without doing anything weird during LLVM's build), and whatever cmake does was not sufficient to pick up all required libs for linking. Here's a portion of the library listing shipped:
usr/lib64/libLLVMAMDGPUAsmParser.so.14
usr/lib64/libLLVMAMDGPUCodeGen.so.14
usr/lib64/libLLVMAMDGPUDesc.so.14
usr/lib64/libLLVMAMDGPUDisassembler.so.14
usr/lib64/libLLVMAMDGPUInfo.so.14
usr/lib64/libLLVMAMDGPUTargetMCA.so.14
usr/lib64/libLLVMAMDGPUUtils.so.14
usr/lib64/libLLVMAggressiveInstCombine.so.14
usr/lib64/libLLVMAnalysis.so.14
usr/lib64/libLLVMAsmParser.so.14
usr/lib64/libLLVMAsmPrinter.so.14
usr/lib64/libLLVMBPFAsmParser.so.14
usr/lib64/libLLVMBPFCodeGen.so.14
usr/lib64/libLLVMBPFDesc.so.14
usr/lib64/libLLVMBPFDisassembler.so.14
usr/lib64/libLLVMBPFInfo.so.14
usr/lib64/libLLVMBinaryFormat.so.14
usr/lib64/libLLVMBitReader.so.14
usr/lib64/libLLVMBitWriter.so.14
usr/lib64/libLLVMBitstreamReader.so.14
usr/lib64/libLLVMCFGuard.so.14
usr/lib64/libLLVMCFIVerify.so.14
usr/lib64/libLLVMCodeGen.so.14
usr/lib64/libLLVMCore.so.14
usr/lib64/libLLVMCoroutines.so.14
usr/lib64/libLLVMCoverage.so.14
usr/lib64/libLLVMDWARFLinker.so.14
usr/lib64/libLLVMDWP.so.14
... (lots)
usr/lib64/libclangTidyZirconModule.so.14
usr/lib64/libclangTooling.so.14
usr/lib64/libclangToolingASTDiff.so.14
usr/lib64/libclangToolingCore.so.14
usr/lib64/libclangToolingInclusions.so.14
usr/lib64/libclangToolingRefactoring.so.14
usr/lib64/libclangToolingSyntax.so.14
usr/lib64/libclangTransformer.so.14
usr/lib64/libclangdRemoteIndex.so.14
usr/lib64/libclangdSupport.so.14
usr/lib64/libfindAllSymbols.so.14
usr/lib64/liblldCOFF.so.14
usr/lib64/liblldCommon.so.14
usr/lib64/liblldELF.so.14
usr/lib64/liblldMachO.so.14
usr/lib64/liblldMinGW.so.14
usr/lib64/liblldWasm.so.14
usr/lib64/liblldb.so.14.0.6
usr/lib64/liblldbIntelFeatures.so.14
usr/lib64/libomp.so
usr/lib64/libompd.so
usr/lib64/libomptarget.rtl.cuda.so
usr/lib64/libomptarget.rtl.x86_64.so
usr/lib64/libomptarget.so
Ok, ill try to fix it
@.***>
---Original--- From: "Ricardo Nabinger @.> Date: Tue, Sep 13, 2022 19:08 PM To: @.>; Cc: "Rong @.@.>; Subject: Re: [iovisor/bcc] Fix: error adding symbols: DSO missing from commandline (PR #4232)
@rnsanchez commented on this pull request.
In examples/cpp/CMakeLists.txt:
> @@ -6,8 +6,8 @@ include_directories(${PROJECT_SOURCE_DIR}/src/cc) include_directories(${PROJECT_SOURCE_DIR}/src/cc/api) include_directories(${PROJECT_SOURCE_DIR}/src/cc/libbpf/include/uapi) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -shared")
I don't get this problem with command line
cmake \ -DCMAKE_INSTALL_PREFIX=/usr \ -DENABLE_LLVM_SHARED=1 \ -DCMAKE_BUILD_TYPE=Debug \ .. make -j$(nproc)
Is this problem belongs to error adding symbols: DSO missing from command line?
For me it ran into a secondary issue, ld not finding libLLVM.so (my 14.0.6 install does not have such lib, but instead a bunch of LLVM libraries).
Verbose output (please don't mind LLVM 13, I'm doing this on multiple machines):
cd /home/rnsanchez/bcc-copy/build/src/cc && /usr/bin/cmake -E cmake_link_script CMakeFiles/bcc-shared.dir/link.txt --verbose=1 /usr/bin/c++ -fPIC -Wall -fno-rtti -fPIC -DBCC_PROG_TAG_DIR='"/var/tmp/bcc"' -Wno-unused-result -DLLVM_MAJOR_VERSION=13 -O3 -DNDEBUG -Wl,--exclude-libs=libclang-cpp.so -Wl,--exclude-libs=libLLVM.a -shared -Wl,-soname,libbcc.so.0 -o lib bcc.so.0.25.0 CMakeFiles/bcc-shared.dir/link_all.cc.o CMakeFiles/bcc-shared.dir/bcc_common.cc.o CMakeFiles/bcc-shared.dir/bpf_module.cc.o CMakeFiles/bcc-shared.dir/bcc_btf.cc.o CMakeFiles/bcc-shared.dir/exported_files.cc.o CMakeFiles/bcc-sh ared.dir/bcc_debug.cc.o CMakeFiles/bcc-shared.dir/bpf_module_rw_engine.cc.o CMakeFiles/bcc-shared.dir/table_storage.cc.o CMakeFiles/bcc-shared.dir/shared_table.cc.o CMakeFiles/bcc-shared.dir/bpffs_table.cc.o CMakeFiles/bcc-shared.dir/json_m ap_decl_visitor.cc.o CMakeFiles/bcc-shared.dir/bcc_syms.cc.o CMakeFiles/bcc-shared.dir/bcc_elf.c.o CMakeFiles/bcc-shared.dir/bcc_perf_map.c.o CMakeFiles/bcc-shared.dir/bcc_proc.c.o CMakeFiles/bcc-shared.dir/common.cc.o frontends/clang/libc lang_frontend.a -Wl,--whole-archive -lclang-cpp -lLLVM -Wl,--no-whole-archive -lelf -ldebuginfod libbcc_bpf.a -Wl,--whole-archive api/libapi-static.a -Wl,--no-whole-archive usdt/libusdt-static.a -lelf -lz /usr/bin/ld: cannot find -lLLVM collect2: error: ld returned 1 exit status make[2]: *** [src/cc/CMakeFiles/bcc-shared.dir/build.make:344: src/cc/libbcc.so.0.25.0] Error 1 make[2]: Leaving directory '/home/rnsanchez/bcc-copy/build' make[1]: *** [CMakeFiles/Makefile2:852: src/cc/CMakeFiles/bcc-shared.dir/all] Error 2 make[1]: Leaving directory '/home/rnsanchez/bcc-copy/build' make: *** [Makefile:146: all] Error 2
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you authored the thread.Message ID: @.***>