2013-01-02 65 views
5

我似乎無法得到此工作。我配置了--with-gcc-toolchain=,在平等之後,我把gcc所在的目錄(/usr/lib/gcc-snapshot/bin)。Clang鏈接器問題(從源代碼到gcc快照)

我也查看了「clang linker problem」的答案,但我沒有看到我如何得到接受的答案以找到正確的位置,並且符號鏈接的答案會起作用,除了它正在搜索的所有目錄存在(將gcc-snapshot中的lib文件夾複製到其中一個包含位置似乎沒有幫助)。

正如在其他問題提出的clang++ test.cpp -v輸出:

[email protected]:~/programming$ clang++ test.cpp -v
clang version 3.3 (trunk 171350)
Target: x86_64-unknown-linux-gnu
Thread model: posix
"/home/bob/programming/build/Release+Asserts/bin/clang" -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -mrelax-all -disable-free -main-file-name test.cpp -mrelocation-model static -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -target-cpu x86-64 -target-linker-version 2.22 -momit-leaf-frame-pointer -v -resource-dir /home/bob/programming/build/Release+Asserts/bin/../lib/clang/3.3 -fmodule-cache-path /var/tmp/clang-module-cache -internal-isystem /usr/local/include -internal-isystem /home/bob/programming/build/Release+Asserts/bin/../lib/clang/3.3/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdeprecated-macro -fdebug-compilation-dir /home/bob/programming -ferror-limit 19 -fmessage-length 80 -mstackrealign -fobjc-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -backend-option -vectorize-loops -o /tmp/test-PWiB4M.o -x c++ test.cpp
clang -cc1 version 3.3 based upon LLVM 3.3svn default target x86_64-unknown-linux-gnu
ignoring nonexistent directory "/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/home/bob/programming/build/Release+Asserts/bin/../lib/clang/3.3/include
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
test.cpp:1:10: fatal error: 'iostream' file not found
#include ^
1 error generated.

鐺版本3.3(樹幹修訂版171350)

編輯:沒有.o文件爲的Release+Asserts文件夾建立。這是正常的嗎?如果不是的話,爲什麼會出現這種情況,我該如何解決它(如果我可以將它指向clang的stdlib,那麼它也可以)。

編輯2:它也無法編譯int main(){return 0;},因爲它無法找到crtbegin.o。全輸出如下:

/usr/bin/ld: cannot find crtbegin.o: No such file or directory
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: cannot find -lgcc_s
clang: error: linker command failed with exit code 1 (use -v to see invocation)

-v後的結果是與上述相同,但與最後的結束誤差是不同的。

的config.log:
完整的文件可以發現here,但第一(非註釋)線:$ ../llvm/configure --with-gcc-toolchain=/usr/lib/gcc-snapshot/gcc

+0

Test.cpp是否編譯並鏈接到g ++?在您的輸出中,代碼無法編譯,因爲找不到iostream。 - – emil

+0

@emil多數民衆贊成我的觀點。我添加了另一個無法在編輯2中編譯的例子。它使用g ++編譯得很好 – soandos

+0

在你安裝的地方iostream文件在哪裏(你的llvm前綴) – Spundun

回答

4

,我們已經確定的問題是,海合會與安裝 - -prefix =/usr/lib/gcc-snapshot配置參數。並且使用--with-gcc-toolchain =/usr/lib/gcc-snapshot/gcc參數配置了llvm。它應該與gcc安裝前綴相同,即--with-gcc-toolchain =/usr/lib/gcc-snapshot。

問題的當前第一行顯示「我使用--with-gcc-toolchain =進行了配置,其中等號後放置了gcc所在的目錄(/ usr/lib/gcc-snapshot/bin)」。當前最後一行表示「第一條(非註釋)行是:$ ../llvm/configure --with-gcc-toolchain =/usr/lib/gcc-snapshot/gcc」

這很令人費解,你可能會認爲你已經把flag --with-gcc-toolchain =/usr/lib/gcc-snapshot/bin,但實際上已經放上--with-gcc-toolchain =/usr/lib/gcc-snapshot/gcc

無論如何,我認爲你應該嘗試以下。

  1. 刪除或重命名構建目錄(運行configure命令的目錄,即找到config.log文件的目錄)我假設它是/ home/bob/programming/build目錄。
  2. 現在再次創建/ home/bob/programming/build目錄。它現在應該是空的。
  3. cd/home/bob/programming/build
  4. 運行以下配置命令 ../ llvm/configure --with-gcc-toolchain =/usr/lib/gcc-snapshot
  5. 繼續執行其餘的構建過程。

這個問題似乎是你沒有正確指定gcc-toolchain前綴。它應該與配置gcc時使用的--prefix參數相同。

在此處報告結果。

另請參閱Clang 3.2 build broken after building gcc 4.7

+0

所以本質上,我在'='後面加了錯誤的目錄? – soandos

+0

是的,我正在添加該信息,就像您發佈您的評論一樣。 – Spundun

+0

也可能有其他的事情發生,但把錯誤的目錄作爲工具鏈參數可以明確解釋我們在這裏看到的。這可能只是實現最終成功的第一步。 – Spundun