簡體   English   中英

用clang和插件編譯

[英]compiling with clang and plugin

clang支持插件,通常這個概念用於構建靜態分析等工具。 為了開始玩它,我采用了這個例子 ,它打印了目標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

我究竟做錯了什么?

我一直認為兩次跑clang是“自然的”,但這是一個有效的問題。

我不認為你做錯了什么,但我相信(沒有過多挖掘clang來源)所發生的事情是所有Xclang都轉發到clangcc1 部分 ,它創建臨時文件以適應插件運行。 但是,當鏈接器作為單獨的進程被喚起時,那些文件不再存在,因此出錯。
您可以在所有這些命令上使用-v選項查看所有這些內容。

我不確定這是否可能,但這個SO 線程可能提供正確方向的線索。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM