2010-02-24 16 views
11

Estoy tratando de construir un proyecto de código abierto muy complejo con VC++. El proyecto consiste en docenas de bibliotecas y un ejecutable dependiendo de esas bibliotecas.¿Puedo pedirle al enlazador de VC++ que ignore los elementos externos no resueltos?

Por alguna razón, el vinculador VC++ no quiere ver aproximadamente 40 funciones implementadas en una de esas bibliotecas e informa "referencias externas no resueltas" en cada una de ellas, por lo que no puedo vincularlas. No quiero perder el tiempo resolviendo el problema; es probable que nunca se llamen esas funciones.

Me gustaría simplemente pedirle al vinculador que vincule lo que ve e inserte un manejo razonable de errores (como informar un error y terminar el programa) en lugar de funciones faltantes. ¿Cómo puedo hacer eso?

Respuesta

13

Puede usar la opción del enlazador /FORCE:UNRESOLVED.

La documentación para que lleve la advertencia lugar discreto:

un archivo creado con esta opción puede no se ejecute como se esperaba.

En la práctica, no habrá ningún error de manejo, solo un bloqueo.

6

Si nunca se llaman realmente las funciones, cree bibliotecas reales (archivos .lib) para las bibliotecas. Entonces el enlazador solo extraerá de las bibliotecas lo que se necesita.

El trabajo del enlazador es resolver todas las referencias, por lo que no creo que vaya a obtener que inserte el código de manejo de errores.

P.S. Lo primero que verificaría es ver si las funciones C se compilaron como C++, lo que lleva a los símbolos que faltan.

+0

+1 para el PS. Los archivos .c obtienen un nombre desquiciado de manera diferente a los archivos .cpp con VisualStudio. Dependiendo de su configuración, es posible que también utilicen una convención de llamadas diferente. –

+0

Bueno, se llaman a veces, pero cuando uso el programa esas rutas nunca se ejercen. Entonces el enlazador tiene razón, necesita la función. Todavía quiero que produzca el ejecutable. +1 de todos modos. – sharptooth

5

Si nunca se llaman, elimine las referencias de su proyecto. Si se llaman, arreglen el maldito problema. No hay otra opción real aquí.

1

Existen algunas excepciones notables, pero la mayoría de los proyectos de OpenSource no están diseñados para ser compilados bajo VisualStudio.

En general, para un puerto de Windows es mejor utilizar cygwin o el sistema mingw. Mi consejo es generalmente para mingw, a menos que el programa use muchas llamadas a OSey de Unix, como las tuberías y las señales.

Cuestiones relacionadas