【问题标题】:LLVM out of source pass build: Loadable modules not supported (on Linux)LLVM out of source pass build:不支持可加载模块(在 Linux 上)
【发布时间】:2015-01-09 15:18:27
【问题描述】:
几周前,我在 debian wheezy 上编译并安装了 LLVM(配置和制作),现在尝试从源代码编译 llvm-mutate pass。
AFAICC,llvm-mutate 遵循 cmake out of source pass build instructions。
尝试构建 llvm-mutate 时
mkdir build
cd build
cmake -DCMAKE_MODULE_PATH=/usr/local/share/llvm/cmake ../
我明白了:
-- 忽略变异 -- 此平台不支持可加载模块。
嗯?
opt 和可加载通道(在 llvm_trunk/build/Debug+Asserts/lib/xxx.so)存在并且可以工作(使用 configure & make 编译,而不是 cmake)。
所以这个问题好像和cmake有关?
其他人也遇到过这样的问题,但是在 Win 上使用 cygwin:here
有什么想法吗?
谢谢
亚历克斯
【问题讨论】:
标签:
c++
linux
shared-libraries
llvm
【解决方案1】:
AddLLVM cmake 模块需要一些先决条件。添加到 CMakeLists.txt:
# AddLLVM needs these
set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin)
set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib)
include(HandleLLVMOptions) # important: matches compiler flags to LLVM/Clang build
include(AddLLVM)
一些灵感来自this message。
【解决方案2】:
只是为了完整起见,如果有人会遇到此错误。此错误同时在 LLVM 3.8.0 中得到修复,因此您只需包含 AddLLVM 即可构建您的插件。 HandleLLVMOption 包含文件仅有助于获得正确的编译器标志,如上文所述。
【解决方案3】:
添加到 alexei 的 reply。
您也可以在CMakeLists.txt 文件中的include(AddLLVM) 行之前添加list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}"),然后在PATH 中添加llvm-config 的LLVM 二进制目录,
调用 cmake 为
CXX=clang++ cmake -DLLVM_DIR=$(llvm-config --prefix)/share/llvm/cmake ..