clang支持插件,通常这个概念被用来构建静态分析之类的工具。为了开始使用它,我使用了this example,它打印目标cpp文件中存在的所有函数名。
我编译了这个插件,运行以下代码:
clang++ -v -std=c++11 PrintFunctionNames.cpp \
$(llvm-config --cxxflags --ldflags) \
-o plugin.so -shared -Wl,-undefined,dynamic_lookup然后“照本宣科”运行它:
clang++ \
-c main.cpp \
-Xclang -load \
-Xclang $PWD/plugin.so \
-Xclang -plugin \
-Xclang print-fns它工作得很好:它以main.cpp格式打印函数名
并退出(不编译由于-c标志而导致的main.cpp )。
我想要做的是打印所有的函数名,并将main.cpp编译成可执行文件。
我尝试删除-c标志,但得到:
/usr/bin/ld: cannot find /tmp/main-284664.o: No such file or directory我做错了什么?
发布于 2017-10-12 02:23:24
您需要使用-add-plugin而不是-plugin
发布于 2017-04-28 06:56:46
我一直认为运行两次clang是“自然”的,但这是一个合理的问题。
我不认为你做错了什么,但我相信(我没有深入研究太多的clang源代码)所有的Xclang都被转发到cc1 part of clang,后者创建临时文件来适应插件的运行。然而,当链接器作为一个单独的进程被调用时,这些文件就不再存在了,因此出现了错误。
您可以通过在所有这些命令上使用-v选项来查看所有这些内容。
我不确定这是否可能,但这使得thread可能为正确的方向提供线索。
https://stackoverflow.com/questions/43667112
复制相似问题