2014-02-11 113 views
1

我正在使用Linux Mint 15 Olivia,並且我在版本庫中安裝了可用的clang編譯器和libclang-dev軟件包,它們是3.2版本。在Linux上與clang/llvm庫鏈接總是失敗

我想編譯並鏈接來自ng版本庫http://llvm.org/svn/llvm-project/cfe/tags/RELEASE_32/final/examples/clang-interpreter/main.cpp的示例,因爲您可以看到它來自鏗鏘聲版本3.2。

當我用命令編譯它:

$> clang++ `llvm-config --cflags` -c main.cpp 

我得到了其中包含了一些不確定的符號鐺/ LLVM庫的文件main.o。我確信它利用納米命令包含符號:

$> nm main.o 

從鐺符號將

_ZN5clang16CompilerInstanceC1Ev 

到現在爲止一切運行良好,直到我試圖鏈接「main.o」文件與clang/llvm庫。當我發出命令:

$> clang++ `llvm-config --ldflags` main.o `llvm-config --libs` 

它失敗,出現以下輸出(我只是把第一個錯誤,以不擾亂這個帖子):

main.o: In function `main': 
main.cpp:74: undefined reference to `clang::TextDiagnosticPrinter::TextDiagnosticPrinter(llvm::raw_ostream&, clang::DiagnosticOptions*, bool)' 

基本上,我得到了一大堆未定義的引用來鏗鏘圖書館。我已經嘗試過對此進行研究,並且我發現所有這一切都與您在命令行上放置庫標記的順序有關。除此之外,我也嘗試過一些其他的事情:

  1. 我嘗試了一堆編譯器標誌,改變其連接標誌出現的順序,他們從來沒有工作過。
  2. 我下載並編譯了LLVM和clang源代碼3.2和3.4版,結果相同:編譯工作,鏈接失敗。值得一提的是,對於每個版本,重新排序鏈接器標誌總是給出不同的鏈接錯誤(這當然是由於鏈接搜索庫的方式)。

我用完了想法,已經花了2個小時試圖從clang的倉庫編譯一個簡單的例子,任何幫助將不勝感激。

謝謝

回答

2

答案很簡單 - LLVM-配置不會給你鐺庫。你需要分開鏈接它們。檢查clang/tools/driver/Makefile作爲庫列表的示例。

+0

感謝您的答覆,我會嘗試,只要我得到我的手我的發展電腦 – elfus

+0

那天晚上我絕對是累了,失明....我用那個Makefile作爲例子,並且還使用了標誌的順序,因爲鐺取決於llvm,現在它編譯:) 謝謝! – elfus

2

這個問題的答案是Anton Korobeynik建議的,我錯過了clang庫(它不是llvm build的一部分,因爲我期望從命令'llvm-config --libs')。

在年底最後的命令竟然是:

clang++ `llvm-config --ldflags` main.o -lclangFrontendTool -lclangFrontend -lclangDriver -lclangSerialization -lclangCodeGen -lclangParse -lclangSema -lclangStaticAnalyzerFrontend -lclangStaticAnalyzerCheckers -lclangStaticAnalyzerCore -lclangAnalysis -lclangARCMigrate -lclangRewriteFrontend -lclangRewriteCore -lclangEdit -lclangAST -lclangLex -lclangBasic `llvm-config --libs` 

如果編譯任何鐺工具或示例,請務必檢查Makefile的下鐺/ tools文件夾:)