2009-02-17 7 views
11

estoy usando Fmod en un proyecto que estoy trabajando en Visual C++ 2008. Si incluyo¿Por qué esta biblioteca no está enlazando con un comentario de pragma?

../fmodapi375win/api/lib/fmodvc.lib 

en Proyecto-> Linker-> entrada, que trabaja muy bien, pero por alguna razón si uso

#pragma comment(lib,"../fmodapi375win/api/lib/fmodvc.lib") 

lugar que funciona de la misma que si esa línea no estaba allí: construye sin errores del enlazador luego se estrella con un desbordamiento de pila de un millón de excepciones de infracción de acceso.

¿Qué está pasando y cómo puedo solucionarlo para poder definir la lib en el código?

Respuesta

1

Las libs se pueden vincular en otro orden, por lo que los símbolos se resuelven de manera diferente.

0

Establecer/VERBOSE en la línea de comando del enlace. En la GUI, puede hacer esto en la página de propiedades del proyecto: agréguelo al nodo "Línea de comando" en Linker.

Luego le dirá cómo resolvió cada función: busque una función que sepa que debe estar en fmodvc.lib.

Otra cosa que hacer es ejecutar PROCMON.EXE durante el enlace (pre-filtro para que PATH CONTAINS fmodvc.lib) - luego enlace. Le indicará la ubicación exacta en la que encontró el archivo (y si alguna vez lo buscó). Obtenga PROCMON aquí: http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx

Finalmente, si está enlazando, pero no cargando su biblioteca (o resolviendo las referencias) - puede tener la opción de forzar que el enlace se establezca correctamente - debe desactivarlo. Sería /FORCE en la sección de línea de comando (como/VERBOSE).

+1

¿El Monitor de proceso va a encontrar bibliotecas * estáticamente enlazadas *? –

+3

durante el enlace, sí. Durante el enlace, el vinculador debe intentar abrir los archivos; procmon lo verá. –

7

No creo que deba proporcionar la .lib en el comentario de pragma, pero creo que el problema real es que está llamando al comentario por ruta. Agregar la ruta de los lib rutas de búsqueda, y luego usar sólo un

#pragma comment(lib,"fmodvc") 

Se supone que usted será capaz de utilizar un camino en este comentario, pero ¿estás seguro de la .. \ ruta que está utilizando es la correcta ruta durante el tiempo de enlace? También asegúrese de que NO está compilando con/nodefaultlib ...

Avíseme si esto todavía no funciona. He usado mucho este tipo de pragma, con gran éxito ...

Pero, ahora que estoy prácticamente atrapado en el mundo de C#, ya no tengo mucho tiempo para programar en C++. ..

+1

Stuart, he vuelto desde esta publicación, y HE usado el #pragma que estás usando, y funciona. Solo tienes que asegurarte de que, de hecho, estás enlazando desde el directorio correcto. Supongo que .../no es correcto, ya que el enlazador funciona fuera del directorio $ (TargetDir) ... Espero que esto ayude. Avíseme si todavía no funciona, y profundizaré aún más ... – LarryF

+0

+1 para la observación sobre/nodefaultlib. Me tomó por sorpresa que esto evitaría que '#pragma comment (lib, ...)' funcionara. –

0

¿Está absolutamente seguro de que es el mismo archivo lib en las dos instancias?

Esto puede ser muy extraño si se olvida de que hay dos versiones de un archivo en su máquina. Le sugiero seriamente que busque en su disco todas las ocurrencias de este archivo solo para hacer un chequeo de cordura.

Cuestiones relacionadas