Я недавно установил LLVM v8.0.0 (на RHEL 7.4).Я изучаю учебник по калейдоскопу LLVM *1002*, чтобы узнать, как пользоваться системой, но сталкиваюсь с проблемой связывания.
В соответствии с учебником ( конец главы 2 ), Я запускаю:
clang++ -g -O3 kld.cpp `llvm-config --cxxflags` -o kld
Компилируется, но компоновщик не работает:
/tmp/kld-f7264f.o:(.data+0x0): undefined reference to `llvm::EnableABIBreakingChecks'
clang-8: error: linker command failed with exit code 1 (use -v to see invocation)
Я подозревал, что это может быть проблема с llvm-config
, поэтому я также попытался использоватьфлаги --ldflags
и --system-libs
, но не повезло.
llvm-config --cxxflags
дает (переформатирован для удобства чтения)
-I~/project/llvm-src/include -I~/project/llvm-build/include
-fPIC -fvisibility-inlines-hidden
-std=c++11
-Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual
-Wno-missing-field-initializers -pedantic -Wno-long-long
-Wno-maybe-uninitialized -Wdelete-non-virtual-dtor -Wno-comment
-g
-fno-exceptions -fno-rtti
-D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS
-D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
Где ~/...
- это просто путь к моему домашнему каталогу(отредактировано для конфиденциальности; фактический вывод - полный путь).Я работаю в общей системе, которая требует локальной установки нового программного обеспечения.
Код учебника никогда не ссылается на ABI явно, поэтому я предполагаю, что это должно быть какой-то проблемой с флагами компилятора.grep
для отсутствующего символа в недвоичных файлах дает объявление extern
в include/llvm/Config/abi-breaking.h
и реальное объявление в lib/Support/Error.cpp
:
#if LLVM_ENABLE_ABI_BREAKING_CHECKS
int EnableABIBreakingChecks;
#else
int DisableABIBreakingChecks;
#endif
Я думал, что попробую перекомпилировать,затем с -DLLVM_ENABLE_ABI_BREAKING_CHECKS
.Это также делает эту работу.
Я не совсем понимаю, что в первую очередь делают проверки взлома ABI, и это может быть намного выше моего уровня комфорта C ++.Но как я могу заставить эту ошибку замолчать, если мне не нужна упомянутая функциональность;или исправить, если я это сделаю?
Спасибо.