Pregunta

Estoy trabajando en un entorno Linux con C ++, usando el compilador GCC.

Actualmente estoy trabajando en modificar y actualizar un gran cuerpo de código preexistente. Como parte de esto, ha sido necesario agregar una gran cantidad de pequeñas referencias en todo el código en una variedad de lugares para vincular las cosas, y también para agregar varias bibliotecas de código externas nuevas. También hay una estructura bastante grande y compleja de Makefiles vinculados a un archivo configure.ac para manejar el proceso de compilación.

Al comenzar el proceso de compilación, todo se compila sin problemas, pero regresa con el temido error del vinculador al intentar usar una biblioteca de códigos personalizados recientemente agregada que hemos creado. Ahora hemos pasado por una gran cantidad de código con un peine de dientes finos buscando desajustes ortográficos, verificando el orden en que se incluyen todas las bibliotecas en el proceso de compilación y verificando que los archivos .o creados contengan lo que necesitamos usando volcados, y todos son como y donde deberían estar. También hemos probado la biblioteca por separado y el problema definitivamente no está ahí.

En resumen, hemos intentado la mayoría de las cosas que normalmente debería hacer en estos escenarios.

¿Existe una herramienta para C ++ que pueda detectar errores de enlazador automáticamente, en una línea similar a cppcheck o splint (que hemos utilizado en vano) que podría ayudar aquí?

¿Fue útil?

Solución

No conozco su plataforma, pero pasé algún tiempo con problemas de enlazador en gcc hasta que me di cuenta de que el enlace de la biblioteca estática ( .a ) requiere un pedido específico, no es lo mismo enlazar gcc object.o first.a second.a que gcc object.o second.a first.a .

Otros consejos

FWIW (no mucho) Intento abordar este tipo de problema utilizando otro vinculador ya que tengo acceso a un par de plataformas diferentes. Si puede utilizar otro vinculador, encontrará:

a) el programa enlaza, lo que transforma su problema de '¿por qué no enlaza?' a '¿cuáles son las diferencias entre enlazadores y enlaces?' que no es exactamente un paso adelante, pero a veces un paso hacia un lado te da una perspectiva diferente desde la cual puedes ver una solución;

O

b) no se puede vincular, en cuyo caso el otro vinculador podría proporcionar información más útil sobre por qué falla.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top