首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用clang和plugin进行编译

使用clang和plugin进行编译
EN

Stack Overflow用户
提问于 2017-04-28 04:11:40
回答 2查看 1.1K关注 0票数 4

clang支持插件,通常这个概念被用来构建静态分析之类的工具。为了开始使用它,我使用了this example,它打印目标cpp文件中存在的所有函数名。

我编译了这个插件,运行以下代码:

代码语言:javascript
运行
复制
clang++ -v -std=c++11 PrintFunctionNames.cpp \
 $(llvm-config --cxxflags --ldflags) \
 -o plugin.so -shared -Wl,-undefined,dynamic_lookup

然后“照本宣科”运行它:

代码语言:javascript
运行
复制
clang++ \
 -c main.cpp \
 -Xclang -load \
 -Xclang $PWD/plugin.so \
 -Xclang -plugin \
 -Xclang print-fns

它工作得很好:它以main.cpp格式打印函数名

并退出(不编译由于-c标志而导致的main.cpp )。

我想要做的是打印所有的函数名,并将main.cpp编译成可执行文件。

我尝试删除-c标志,但得到:

代码语言:javascript
运行
复制
/usr/bin/ld: cannot find /tmp/main-284664.o: No such file or directory

我做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2017-10-12 02:23:24

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

票数 4
EN

Stack Overflow用户

发布于 2017-04-28 06:56:46

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

我不认为你做错了什么,但我相信(我没有深入研究太多的clang源代码)所有的Xclang都被转发到cc1 part of clang,后者创建临时文件来适应插件的运行。然而,当链接器作为一个单独的进程被调用时,这些文件就不再存在了,因此出现了错误。

您可以通过在所有这些命令上使用-v选项来查看所有这些内容。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43667112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档