2013-01-02 23 views
5

Bunu işe yaramış gibi görünmüyor. Ben --with-gcc-toolchain= ile yapılandırıldı nerede eşittir sonra gcc (/usr/lib/gcc-snapshot/bin) olduğu dizini koydu.Clang linker sorunları (kaynaktan, gcc için anlık görüntü)

Ayrıca "clang linker problem" yanıtlarına da baktım ama doğru yeri bulmak için kabul edilen yanıtı nasıl alabildiğimi görmüyorum ve symlink cevabı işe yaradı, aradığı tüm dizinler hariç var (lib klasörünün gcc-snapshot dosyasından kopyalama konumlarından birine kopyalanması yardımcı görünmüyor). Diğer soru da önerildiği gibi

, clang++ test.cpp -v çıktısı:

[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.

clang sürüm 3.3 (gövde revizyon 171350)

DÜZENLEME: için Release+Asserts klasörde hiç .o dosya yok inşa etmek. Bu normal mi? Eğer değilse, neden bu durumda, ve nasıl düzeltebilirim (eğer clang'ın stdlib'i olarak işaret edebilirsem, o zaman bu da işe yarar).

Düzenleme 2: Bu crtbegin.o bulamıyorum olarak Ayrıca int main(){return 0;} derlenmeyecektir. -v sonra

/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)

sonuç yukarıdaki aynıdır, ancak biten hata ile farklı olmak şöyledir: Tam çıkışıdır. Tam dosya here bulunabilir
, ancak ilk (non-comment) çizgisidir:

config.log saptadığımız $ ../llvm/configure --with-gcc-toolchain=/usr/lib/gcc-snapshot/gcc

+0

derlemek test.cpp mu ve bağlantı g gördüğümüz ++? Çıktınızda kod, iostream bulunamadığından derleme başarısız olur. - – emil

+0

@emil bu benim amacım. Düzenleme 2'de derlenemeyen başka bir örnek ekledim. G ++ – soandos

+0

ile derler. Nereye yüklediğiniz yerde iostream dosyası nerede olur? Llvm (llvm öneki) – Spundun

cevap

4

konu gcc ile yüklenmiş olmasıdır - -prefix =/usr/lib/gcc-snapshot argümanını yapılandırır. ve llvm --with-gcc-toolchain =/usr/lib/gcc-snapshot/gcc argümanı ile yapılandırıldı. Gcc kurulum önekiyle aynı olmalıdır, yani --with-gcc-toolchain =/usr/lib/gcc-snapshot.

Sorunun şimdiki ilk satırı "Ben --with-gcc-toolchain ile yapılandırılmış = eşitleri sonra gcc oldu dizini (/ usr/lib/gcc-enstantane/bin). Nereye koyduğunu" ve diyor mevcut son satır "ilk (yorumsuz) satır" diyor: $ ../llvm/configure --with-gcc-toolchain =/usr/lib/gcc-anlık görüntü/gcc "

Bu çok şaşırtıcı --with-gcc-toolchain =/usr/lib/gcc-snapshot/bin etiketini koyduğunuzu düşünmüştünüz ama aslında --with-gcc-toolchain =/usr/lib/gcc-snapshot/gcc

Ne olursa olsun, aşağıdakileri denemelisiniz.

  1. kaldırmasını veya yeniden adlandırmak derleme dizini (configure komutunu koştu dizini sen config.log dosyayı buldum yani dizin) Ben/home/bob/programlama varsayıyorum/dizini kurmak.
  2. şimdi/home/bob/programming/build dizinini yeniden oluşturun. şimdi boş olmalı.
  3. cd/home/bob/programlama/
  4. şu yapılandırmak komutunu çalıştırmak inşa ../ llvm/configure --with-gcc-toolchain =/usr/lib/gcc-snapshot
  5. Yapı işleminizin geri kalanını izleyin.

Sorun, gcc-toolchain önekini doğru bir şekilde belirtmemiş olmanız gibi görünüyor. Gcc'yi yapılandırırken kullandığınız --prefix parametresiyle aynı olmalıdır.

Sonuçları buradan geri raporlayın.

Ayrıca Clang 3.2 build broken after building gcc 4.7

+0

Yani özünde, ben yanlış yönünü '='? – soandos

+0

evet Bu bilgiyi tıpkı yorumunuzu gönderdiğiniz gibi ekliyordum. – Spundun

+0

Ayrıca devam eden başka şeyler de olabilir, fakat yanlış dizini toolchain parametresi olarak görmek, burada gördüğümüz şeyi kesinlikle açıklayabilir. Bu, nihai başarınıza giden ilk adım olabilir. – Spundun

İlgili konular