ld.lld: error: undefined symbol: llvm::InitLLVM::InitLLVM(int&, char const**&, bool)
>>> referenced by llvm-ar-driver.cpp
>>> CMakeFiles/llvm-ar.dir/llvm-ar-driver.cpp.o:(main)
From my attempt to build LLVM using LLVM_DISTRIBUTION_COMPONENTS
, LLVM_BUILD_LLVM_DYLIB
, CMAKE_INSTALL_PREFIX
, DESTDIR
(among others).
Verbose shows:
"/usr/bin/ld.lld" --hash-style=gnu --build-id --eh-frame-hdr -m elf_x86_64 -pie -dynamic-linker \
/lib64/ld-linux-x86-64.so.2 -o ../../bin/llvm-ar /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../lib64/Scrt1.o \
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../lib64/crti.o /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/crtbeginS.o \
-L/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1 -L/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../lib64 -L/lib/../lib64 \
-L/usr/lib/../lib64 -L/lib -L/usr/lib --gc-sections --dependency-file=CMakeFiles/llvm-ar.dir/link.d CMakeFiles/llvm-ar.dir/llvm-ar.cpp.o \
CMakeFiles/llvm-ar.dir/llvm-ar-driver.cpp.o -rpath "\$ORIGIN/../lib:/<pathTo>/build/lib:" ../../lib/libLLVM.so.21.0git -lstdc++ \
-lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/crtendS.o \
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../lib64/crtn.o
readelf for built lib/libLLVM.so.21.0git
: 1725: 0000000000000000 0 FILE LOCAL DEFAULT ABS InitLLVM.cpp
And for lib/libLLVMSupport.a
:
1: 0000000000000000 0 FILE LOCAL DEFAULT ABS InitLLVM.cpp
2: 0000000000000000 0 SECTION LOCAL DEFAULT 3 .text._ZN4llvm8InitLLVMC2ERiRPPKcb
3: 0000000000000000 0 SECTION LOCAL DEFAULT 5 .text._ZN4llvm8InitLLVMD2Ev
5: 0000000000000000 235 FUNC GLOBAL HIDDEN 3 llvm::InitLLVM::InitLLVM(int&, char const**&, bool)
15: 0000000000000000 63 FUNC GLOBAL HIDDEN 5 llvm::InitLLVM::~InitLLVM()
22: 0000000000000000 235 FUNC GLOBAL HIDDEN 3 llvm::InitLLVM::InitLLVM(int&, char const**&, bool)
23: 0000000000000000 63 FUNC GLOBAL HIDDEN 5 llvm::InitLLVM::~InitLLVM()
For the distribution comparison:
1: 0000000000000000 0 SECTION LOCAL DEFAULT 4 .text._ZN4llvm8InitLLVMC2ERiRPPKcb
2: 0000000000000000 0 SECTION LOCAL DEFAULT 6 .text._ZN4llvm8InitLLVMD2Ev
5: 0000000000000000 302 FUNC GLOBAL DEFAULT 4 llvm::InitLLVM::InitLLVM(int&, char const**&, bool)
16: 0000000000000000 302 FUNC GLOBAL DEFAULT 4 llvm::InitLLVM::InitLLVM(int&, char const**&, bool)
17: 0000000000000000 308 FUNC GLOBAL DEFAULT 6 llvm::InitLLVM::~InitLLVM()
21: 0000000000000000 308 FUNC GLOBAL DEFAULT 6 llvm::InitLLVM::~InitLLVM()
FILE LOCAL DEFAULT ABS InitLLVM.cpp
and HIDDEN
seems key to finding a solution.
And for InitLLVM.cpp
:
cd /<pathTo>/build/lib/Support && /usr/bin/clang++ -DGTEST_HAS_RTTI=0 -DLLVM_EXPORTS -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS \
-D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/<pathTo>/build/lib/Support \
-I/<pathTo>/llvm_project/llvm/lib/Support -I/<pathTo>/build/include -I/<pathTo>/llvm_project/llvm/include -v -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 -pedantic -Wno-long-long -Wc++98-compat-extra-semi \
-Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override \
-Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -ffunction-sections -fdata-sections -Werror=global-constructors \
-O3 -DNDEBUG -std=c++17 -fvisibility=hidden -fvisibility-inlines-hidden -fno-exceptions -funwind-tables -fno-rtti -MD \
-MT \lib/Support/CMakeFiles/LLVMSupport.dir/InitLLVM.cpp.o -MF CMakeFiles/LLVMSupport.dir/InitLLVM.cpp.o.d \
-o CMakeFiles/LLVMSupport.dir/InitLLVM.cpp.o -c /<pathTo>/llvm_project/llvm/lib/Support/InitLLVM.cpp
I had no role with -fvisibility=hidden -fvisibility-inlines-hidden
being used.
EDIT0: Looks like it could be due to my addition of LLVM_BUILD_LLVM_DYLIB_VIS
(seems very likely). Rebuilding now…