我目前正在编写一个使用demangle功能(来自Demangle/Demangle.h的Demangle())的pass,当我用
$ opt -load $(MYPASS) -myPass test.ll > testInstrumented.ll
我得到以下错误:
dyld: lazy symbol binding failed: Symbol not found: __ZN4llvm8demangleERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE
Referenced from: $(LLVM_BUILD)/lib/LLVMMyVectorAnalysis.dylib
Expected in: flat namespace 似乎demangle库没有链接到我为我的pass创建的共享库。我想知道怎么解决这个问题?我想这可能与我的pass的CMakeLists.txt更改有关,但我看不到确切的更改是什么。
我的CMakeLists.txt的内容:
if( NOT LLVM_REQUIRES_RTTI )
if( NOT LLVM_REQUIRES_EH )
set(LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_CURRENT_SOURCE_DIR}/MyVectorAnalysis.exports)
endif()
endif()
if(WIN32 OR CYGWIN)
set(LLVM_LINK_COMPONENTS Core Support)
endif()
add_llvm_library( LLVMMyVectorAnalysis MODULE BUILDTREE_ONLY
MyVectorAnalysis.cpp
DEPENDS
intrinsics_gen
PLUGIN_TOOL
opt
) 发布于 2019-08-30 03:34:05
在不访问所有代码的情况下很难进行诊断,但我认为您可能遗漏了以下内容:
llvm_map_components_to_libnames(MY_PASS_LINK_COMPONENTS Demangle)
target_link_libraries(LLVMMyVectorAnalysis ${MY_PASS_LINK_COMPONENTS})Demangle是您希望链接器链接的库,llvm_map_components_to_libnames是自解释的。最后,target_link_libraries告诉CMake将Demangle库(实际库的名称会有所不同)链接到pass。
免责声明:我已经针对LLVM-8验证了这一点。
发布于 2020-06-15 13:39:27
添加
set(LLVM_LINK_COMPONENTS
Demangle
)进入CMakeList.txt。我对你也有同样的问题,这对我很有效。
https://stackoverflow.com/questions/57436959
复制相似问题