LLVM 传递链接问题:未定义的符号
LLVM Pass Linking problem: undefined symbol
我正在尝试在LLVM中编写自己的pass,但是在使用自己的库时遇到问题。
以下是我编译通行证的方法:
[shinjitumala@FPRAlienware17M FPR]$ make
[ 000% ] compiling object file obj/fpr/llvm/debug.o...
../../../tools/llvm-project/llvm/build-8.0.1/bin/clang++ -fPIC -Wall -g3 -fno-rtti -MD -o obj/fpr/llvm/debug.o -c src/fpr/llvm/debug.cpp -I../../../tools/llvm-project/llvm/build-8.0.1/../include -I../../../tools/llvm-project/llvm/build-8.0.1/include -Iinclude
[ 025% ] Done!
[ 025% ] compiling object file obj/fpr/out.o...
../../../tools/llvm-project/llvm/build-8.0.1/bin/clang++ -fPIC -Wall -g3 -fno-rtti -MD -o obj/fpr/out.o -c src/fpr/out.cpp -I../../../tools/llvm-project/llvm/build-8.0.1/../include -I../../../tools/llvm-project/llvm/build-8.0.1/include -Iinclude
[ 050% ] Done!
[ 050% ] compiling object file obj/module_pass.o...
../../../tools/llvm-project/llvm/build-8.0.1/bin/clang++ -fPIC -Wall -g3 -fno-rtti -MD -o obj/module_pass.o -c src/module_pass.cpp -I../../../tools/llvm-project/llvm/build-8.0.1/../include -I../../../tools/llvm-project/llvm/build-8.0.1/include -Iinclude
src/module_pass.cpp:24:16: warning: unused variable 'i' [-Wunused-variable]
for (auto& i : bb) {
^
src/module_pass.cpp:21:22: warning: unused variable 'context' [-Wunused-variable]
llvm::LLVMContext& context = m.getContext();
^
2 warnings generated.
[ 075% ] Done!
[ 075% ] linking binary bin/libFPRPass.so...
../../../tools/llvm-project/llvm/build-8.0.1/bin/clang++ -fPIC -shared -o bin/libFPRPass.so -L../../../tools/llvm-project/llvm/build-8.0.1/lib obj/fpr/llvm/debug.o obj/fpr/out.o obj/module_pass.o
[ 100% ] Done!
[ 100% ] All Done!
但这是我运行通行证时得到的:
[shinjitumala@FPRAlienware17M FPR]$ ../../../tools/llvm-project/llvm/build-8.0.1/bin/opt -load bin/libFPRPass.so -test < main.ll > obj/main_new.ll
../../../tools/llvm-project/llvm/build-8.0.1/bin/opt: symbol lookup error: bin/libFPRPass.so: undefined symbol: _ZN3fpr3outlsIA54_cEERS0_RKT_
当我只是在某些测试程序中使用我的库时,不会发生这种情况。仅当我在 LLVM 通行证中使用它们时,才会发生这种情况。
这是通行证本身的代码:
#include <fpr/out.h>
#include <fpr/llvm/debug.h>
#include <llvm/IR/Module.h>
#include <llvm/Support/CommandLine.h>
static llvm::cl::opt<int> slice_start_line("l");
namespace fpr {
struct ModulePass : public llvm::ModulePass
{
public:
static char ID;
ModulePass()
: llvm::ModulePass(ID)
{}
bool runOnModule(llvm::Module& m) override
{
llvm::LLVMContext& context = m.getContext();
for (auto& f : m) {
for (auto& bb : f) {
for (auto& i : bb) {
fpr::out(2) << "testn";
}
}
}
return true;
}
};
}
/**
* パスの登録
*/
char fpr::ModulePass::ID = 0;
static llvm::RegisterPass<fpr::ModulePass> module_pass("test", "discription placeholder");
我试图在链接程序时添加/删除-shared
标志以及将其与--no-undefined
链接,但到目前为止都没有工作。
我也无法从旧答案中找到我正在寻找的确切内容,所以我在这里。
任何帮助将不胜感激。
好的。在问了比我聪明的人之后。这是因为我在out.cpp
而不是out.h
中实现了operator<<
。这真的很傻...它与LLVM无关。
相关文章:
- vscode g++链路故障:体系结构x86_64的未定义符号
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- C++ 中 dlsym 的未定义符号
- 仅在 MacOS 上析构函数的未定义符号
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- PCL 出错:体系结构x86_64 @pcl的未定义符号
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 体系结构x86_64的未定义符号:链接器错误
- C++ std::vector<int> 体系结构的未定义符号 x86_64:
- 生成文件:体系结构x86_64的未定义符号
- libc++abi未定义符号:_ZTVN10__cxxabif120__si-class_type_infoE
- Xcode"体系结构x86_64的未定义符号"
- 体系结构x86_64的未定义符号:找不到原因
- SWIG链接器:未定义符号:_ZN2cv8fastFreeEPv(cv::fastFree(void*))
- 如何修复架构x86_64的未定义符号,Boost Asio 1.58
- 在Qt5上去静态库:架构的未定义符号x86_64:
- 体系结构x86_64的未定义符号:c++/ h 文件和 cpp 文件
- 监视 SDK 下的未定义符号"__Unwind_SjLj_Unregister"
- 使用 Boost/Python 的未定义符号 - 复杂
- 建筑x86_64的未定义符号:"vtkDebugLeaksManager::vtkDebugLeaksManager()",引用自: