我的主机系统
默认目标:x86_64-未知-linux-gnu
主机CPU: skylake
使用LLVM_TARGETS_TO_BUILD=all选项构建的LLVM/Clang。
如何在我的代码中使用另一个目标的初始化函数?
我修改了klee (符号执行工具)来运行跨平台目标的IR。
#include "llvm/Support/TargetSelect.h"
int main () {
...
// llvm::InitializeAllTargets(); -> Error
llvm::InitializeNativeTargets(); -> Success
...
}
在这种情况下,错误
${LLVM}/build/include/llvm/Config/Targets.def:28: undefined reference to `LLVMInitializeARMTargetInfo'
${LLVM}/build/include/llvm/Config/Targets.def:29: undefined reference to `LLVMInitializeBPFTargetInfo'
...
发布于 2022-09-12 14:21:50
LLVMInitializexxxTargetInfo()函数由InitializeAllTargets(),使用,错误消息意味着您没有链接所需的LLVM库。
InitializeNativeTargets()成功了,因为您可能没有在-DLLVM_TARGETS_TO_BUILD中包含您的本地arch。
您可以在CMakeLists.txt中添加以下行来链接LLVM目标库:
set(LLVM_LINK_COMPONENTS
${LLVM_TARGETS_TO_BUILD}
)
# Build your .cpp with llvm macro to use LLVM_LINK_COMPONENTS
add_llvm_xxx_macro(YourOutputFile
...
)
https://stackoverflow.com/questions/71867265
复制相似问题