2011-05-06 16 views
9

Tengo una biblioteca estática que se ha compilado con gcc 3.4.3. Me gustaría utilizar esto en el código que ahora se compilará con gcc-4. He leído vagamente que los binarios gcc-3 y gcc-4 no son compatibles y que la biblioteca necesitará ser recompilada, pero solo quiero confirmación al respecto. ¿No hay, de todos modos, una biblioteca gcc-3 que pueda usarse con gcc-4?son binarios gcc-3 compatibles con gcc-4

+2

http://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html – James

+0

Ha etiquetado esto tanto en C++ como en C. ¿La biblioteca contiene código C++? – Rup

+0

Sí, aunque en bibliotecas separadas. Por ejemplo, library1.a es el código c. library2.a es el código cpp. – Abhijith

Respuesta

3

Conseguir que alguien más en la organización, o en un proveedor, actualice su biblioteca a gcc 4 no siempre es una opción, especialmente si la abandonaron.

Si C++: asumiendo que es capaz de enlazar, en tiempo de ejecución se puede volar en código C++ plantilla de biblioteca estándar que utiliza corrientes, como símbolos generados por g ++ 4 se resuelven contra las definiciones generadas por g ++ 3.

Usted podría ver esta advertencia al vincular:

/usr/bin/ld: advertencia: libstdC++ so.5, que necesita (lib estática legacy), pueden entrar en conflicto con libstdC++ so.6

He aquí un ejemplo que.. puede entrar en: destructor de la clase base ~ basic_stringbuf() (en realidad una plantilla) se puede definir en su módulo compilado bajo g ++ 3, que mista kenly es llamado por el destructor ~ basic_ostringstream() en libstdC++ so.6, que es invocado por el módulo compilado g ++ 4. Ka-Boom.

Probé compat-libstdC++ - 33 pero no tuve suerte con eso.

Dicho esto, sigo enlazando las bibliotecas C de 32 bits de la era gcc en mis programas gcc 4.1.2 C++.

+0

En realidad, es un problema con los cambios de nombres. C no tiene estos problemas, por lo que puede vincularse con bibliotecas C antiguas. –

+1

por lo general. A veces, las bibliotecas C cambian al punto donde el enlace funciona pero el código no. Casi siempre esto se debe a la macro expansión de getc y amigos. – Joshua

+0

Sin embargo, si la biblioteca está vinculada completamente estática, esto no será un problema. – Joshua

Cuestiones relacionadas