Гораздо лучшая поддержка llvm в cmake, если вы нацелились на cmake 3.5, который решит многие из этих проблем, добавив возможность ссылаться на библиотеки в виртуальных группах, а не на список библиотек, который вы используете вручную.
Вы используете список библиотек, которые подходили бы для временного интервала llvm 3.5, но вы связываетесь с llvm 6, поэтому за это время кое-что изменилось - большая реорганизация библиотеки.Например, библиотека LLVMJIT была удалена в 3.6
, а LLVMipa была удалена в 3.8 (никакой ссылки не найдено ни в чем, кроме исходного кода), но в общем и целом, это тонкий списокбиблиотек, которые будут меняться при сборке на разных версиях llvm.
вы делаете:
set(LLVM_LINK_COMPONENTS
Core
ExecutionEngine
Interpreter
MC
Support
nativecodegen
)
должен работать со всеми библиотеками, которые вы связываете - вы не должныдобавьте полный список библиотек для ссылки вручную в конце, например, так.
На основе списка библиотек вам необходимо добавить следующие компоненты:
mcjit
x86 (covers asmparser, disassembler and code generator)
asmparser
objcarcopts (LLVMObjCARCOpts - is it needed???)
scalaropts
transformutils
irreader
, поэтому измените на:
set(LLVM_LINK_COMPONENTS
Core
ExecutionEngine
Interpreter
MC
Support
nativecodegen
mcjit
x86
asmparser
objcarcopts
scalaropts
transformutils
irreader
)
дает нам список используемых компонентов.LLVMipa
был откатан к основному LLVMAnalysis
, поэтому вам больше не нужно его указывать.
установка переменной для библиотек:
llvm_map_components_to_libnames(llvm_libs ${LLVM_LINK_COMPONENTS})
Используется код отображения llvmдля сопоставления с необходимыми библиотеками.
Изменение строки ссылки на:
target_link_libraries(driver
pthread
tinfo
dl
${llvm_libs}
)
свяжет соответствующие библиотеки, и вы можете удалить target_link_libraries
, указав отдельные библиотеки.