Domanda

ho avuto numerosi problemi di compilazione oggetti condivisi che puntano in modo statico le librerie statiche. Questo problema mostra solo su piattaforme x84_64. Quando si fa lo stesso lavoro di compilazione su x86_32 non ho alcun problema.

Forse questo è un sistema operativo specifico cosa configurazione GCC, ma la mia ricerca indica che la sua come funziona GCC su piattaforme x86_64. Comunque, io sto usando gcc 4.4.3 su Ubuntu 10.04 x86_64.

Come è il problema risolto? ... assicurandosi che tutti i dipendenze di librerie statiche sono compilate con -fPIC.

Domanda 1: Qual è la differenza tra -fPIC e -fPIC (apparentemente -fPIC genera più istruzioni su x86)? Perché la successiva digitare più rilevante nel contesto x86_64?

Domanda 2: La mia ipotesi è che quando si collega contro il codice statico sei hard-cablaggio delle funzioni nel tuo binario in fase di collegamento, perché ha bisogno del livello di indirezione "codice indipendente di posizione "macchina fornisce?

Domanda 3: Ora, se x86 non ha bisogno di -fpic / -fPIC di oggetti collegamento condiviso rispetto archivi statici perché è necessario in x86_64?

Domanda 4: , anche se è necessario perché non è fornito in modo implicito? Ho pensato rottura modifiche doveva essere un grande no-no

È stato utile?

Soluzione

  1. 3.544.035 . Anche discusso qui e ci .
  2. Dipende da quello che si utilizza avrà per la libreria statica. Se si desidera collegare in programmi solo, non ha bisogno di codice PIC (chiamate libtool che una biblioteca convenienza, perché si poteva tranquillamente fare a meno, ma aiuta semplicemente ottenere il vostro processo di compilazione a una dimensione ragionevole, per esempio). In caso contrario, se si ha intenzione di collegare librerie condivise contro di essa, è necessario il codice PIC nella libreria statica.
  3. 3.146.744 e anche qui
  4. E 'bloats il codice, quindi non è il default. Una cosa da vedere è che, quando si compila un file singolo oggetto, GCC non si sa se si sta andando a creare una libreria condivisa fuori di esso o meno. Nella maggior parte dei miei progetti più piccoli, ho semplicemente collegare insieme un paio di file oggetto, e non hanno bisogno di codice PIC, per esempio.

Inoltre, il mio consiglio è: se avete bisogno di preoccuparsi di che, si sta facendo male (o ti piacerebbe imparare il modo difficile, che è bello perché si otterrà più fuori l'esperienza). sistemi di compilazione (libtool, cmake, qualunque cosa si usa) dovrebbero farlo per voi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top