2013-01-02 4 views
5

Non riesco a farlo funzionare. Ho configurato con il --with-gcc-toolchain= dove dopo gli equals ho messo la directory in cui gcc era (/usr/lib/gcc-snapshot/bin).Problemi del linker Clang (dall'origine, a gcc-snapshot)

Ho anche esaminato le risposte a "clang linker problem" ma non vedo come posso ottenere la risposta accettata per trovare la posizione corretta, e la risposta in collegamento simbolico avrebbe funzionato, tranne che tutte le directory che sta cercando esiste (copiare la cartella lib da gcc-snapshot in una delle posizioni di inclusione non sembra essere di aiuto).

Come suggerito in altra domanda, l'uscita del 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.

clang versione 3.3 (tronco revisione 171350)

EDIT: ci sono .o file nella cartella Release+Asserts per la costruire. È normale? In caso contrario, perché è così, e come posso risolverlo (se posso indicarlo come stdlib di clang, allora funziona anche così).

Edit 2: Non riesce anche a compilare int main(){return 0;} in quanto non riesce a trovare crtbegin.o. piena potenza è la seguente:

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

I risultati dopo -v sono gli stessi come sopra, ma con l'errore desinenza essere diversi.

config.log:
Il file completo può essere trovato here, ma la prima linea (non di commento) è: $ ../llvm/configure --with-gcc-toolchain=/usr/lib/gcc-snapshot/gcc

+0

Does test.cpp compilare e collegare con g ++? Nel tuo output il codice non riesce a compilare perché iostream non viene trovato. - – emil

+0

@emil questo è il mio punto. Ho aggiunto un altro esempio che non riesce a compilare in edit 2. Si compila bene con g ++ – soandos

+0

Dove si trova il file iostream nel posto in cui hai installato llvm (il tuo prefisso llvm) – Spundun

risposta

4

Il problema che abbiamo identificato è che gcc è stato installato con - -prefix =/usr/lib/gcc-snapshot configure argomento. e llvm è stato configurato con --with-gcc-toolchain =/usr/lib/gcc-snapshot/gcc argument. Dovrebbe essere uguale al prefisso di installazione di gcc, ad esempio --with-gcc-toolchain =/usr/lib/gcc-snapshot.

La prima riga della domanda dice "Ho configurato con --with-gcc-toolchain = dove dopo gli equals ho inserito la directory in cui gcc era (/ usr/lib/gcc-snapshot/bin).", E l'ultima riga corrente dice "la prima riga (senza commento) è: $ ../llvm/configure --with-gcc-toolchain =/usr/lib/gcc-snapshot/gcc"

Questo è sconcertante, si potrebbe ho pensato che avevi messo il flag --with-gcc-toolchain =/usr/lib/gcc-snapshot/bin ma in realtà avevi messo --with-gcc-toolchain =/usr/lib/gcc-snapshot/gcc

Indipendentemente da ciò, penso che dovresti provare quanto segue.

  1. rimuovere o rinominare la directory di costruzione (la directory in cui è stato eseguito il comando configure, vale a dire la directory dove avete trovato il file config.log) Penso che sia la/home/bob/programmazione/build directory.
  2. ora creare nuovamente la directory/home/bob/programming/build. dovrebbe essere vuoto ora.
  3. cd/home/bob/programmazione/build
  4. eseguire il seguente comando configure ../ llvm/configure --with-gcc-toolchain =/usr/lib/gcc-snapshot
  5. seguire con il resto del processo di compilazione.

Il problema sembra essere che non hai specificato correttamente il prefisso gcc-toolchain. Dovrebbe essere uguale al parametro --prefix che hai usato durante la configurazione di gcc.

Riportare qui i risultati.

vedere anche Clang 3.2 build broken after building gcc 4.7

+0

Quindi, in sostanza, ho messo la directory sbagliata dopo il '='? – soandos

+0

sì, aggiungevo queste informazioni proprio come eri pubblicato il tuo commento. – Spundun

+0

Potrebbero esserci anche altre cose, ma mettere la directory sbagliata come parametro della toolchain potrebbe sicuramente spiegare quello che stiamo vedendo qui. Questo potrebbe essere solo il primo passo verso il tuo successo finale. – Spundun