C++ 使用clang和plugin编译

C++ 使用clang和plugin编译,c++,plugins,clang,llvm,C++,Plugins,Clang,Llvm,clang支持插件,这个概念通常用于构建静态分析等工具。 为了开始使用它,我选择了打印目标cpp文件中存在的所有函数名。 我编译的插件运行以下命令: clang++ -v -std=c++11 PrintFunctionNames.cpp \ $(llvm-config --cxxflags --ldflags) \ -o plugin.so -shared -Wl,-undefined,dynamic_lookup 然后“按书”运行它: 它工作得很好:它在main.cpp中打印函数名并退

clang
支持插件,这个概念通常用于构建静态分析等工具。 为了开始使用它,我选择了打印目标cpp文件中存在的所有函数名。
我编译的插件运行以下命令:

clang++ -v -std=c++11 PrintFunctionNames.cpp \
 $(llvm-config --cxxflags --ldflags) \
 -o plugin.so -shared -Wl,-undefined,dynamic_lookup
然后“按书”运行它:

它工作得很好:它在main.cpp
中打印函数名并退出(由于-c标志,没有编译main.cpp)

我要做的是打印所有函数名并将main.cpp编译成可执行文件。
我试图删除
-c
标志,但得到:

/usr/bin/ld: cannot find /tmp/main-284664.o: No such file or directory
我做错了什么?

我一直认为运行两次
clang
是“自然的”,但这是一个有效的问题

我不认为你做错了什么,但我相信(没有深入挖掘
clang
源代码)现在发生的是所有
Xclang
都被转发到
clang
cc1
,它创建临时文件以适应插件运行。但是,当链接器作为一个单独的进程被调用时,这些文件不再存在,因此出现错误。
通过在所有这些命令上使用
-v
选项,您可以看到所有这些


我不确定这是否可能,但这可能为正确的方向提供线索。

您需要使用-add plugin而不是-plugin

指向“this SO thread”的链接已断开。你还有机会吗?@mrks链接修复
/usr/bin/ld: cannot find /tmp/main-284664.o: No such file or directory