bcc icon indicating copy to clipboard operation
bcc copied to clipboard

Fix: error adding symbols: DSO missing from command line

Open Rtoax opened this issue 3 years ago • 7 comments

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.

Rtoax avatar Sep 12 '22 06:09 Rtoax

@rnsanchez Could you please check if this patch fix your issue #4214 ?

chenhengqi avatar Sep 12 '22 10:09 chenhengqi

Totally same https://github.com/iovisor/bcc/issues/4214

Rtoax avatar Sep 12 '22 10:09 Rtoax

@rnsanchez Could you please check if this patch fix your issue #4214 ?

Fix confirmed with the patch!

rnsanchez avatar Sep 12 '22 11:09 rnsanchez

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.

yonghong-song avatar Oct 08 '22 16:10 yonghong-song

Yes, thanks a lot. actually, i always compile with -DENABLE_LLVM_SHARED=ON, does @rnsanchez still have this problem, or just close this PR?

Rtoax avatar Oct 09 '22 09:10 Rtoax

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

rnsanchez avatar Oct 09 '22 14:10 rnsanchez

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: @.***>

Rtoax avatar Oct 11 '22 08:10 Rtoax