2010-06-02 20 views
5

Estoy intentando construir mi aplicación con MSVC 2010 en lugar de GCC. Con GCC todo funciona bien. Mi aplicación usa las bibliotecas boost_system y boost_thread. construí impulso con VC2010 en el diseño de "sistema", que significa que las bibliotecas se denominan simplemente libboost_system.lib (y no libboost_system_compiler_threading_version_wtf_snafu.lib) Las bibliotecas residen en C: \ Boost \ lib, el Makefile especificaVC++ 2010 quiere vincular las bibliotecas de impulso que ni siquiera especifiqué

LFLAGS  = /NOLOGO /INCREMENTAL:NO /SUBSYSTEM:CONSOLE 
LIBS   = /LIBPATH:C:/Boost/lib libboost_system.lib libboost_thread.lib Ws2_32.lib 

al invocar nmake compila, pero al intentar enlazar dejarlo con

LINK : fatal error LNK1104: cannot open file 'libboost_date_time-vc100-mt-1_43.lib 

en serio, ¿WTF? Le dije que vincule libboost_systen.lib y libboost_thread.lib, ¿cómo es que trata de vincular libboost_data_time y por qué supone que construí las libs en el diseño "etiquetado"? ¿Cómo puedo evitar que MSVC intente ser inteligente y adivinar qué podría querer haber querido vincular?

Gracias, Philipp

Respuesta

5

Esta es una característica de las libs impulso con compiladores compatibles para el enlace automático.

(Esos nombres de biblioteca enrevesadas cubren la miríada de rosca y las opciones que están disponibles en la plataforma que une, hay buenas razones para utilizar esa convención en Windows ...)

Más información aquí:

http://www.boost.org/doc/libs/1_33_1/more/getting_started.html#auto-link

No puedo encontrar una página para una versión más reciente, pero creo que BOOST_ALL_NO_LIB y las opciones relacionadas siguen siendo válidas en 1.43.

+0

Oye, eso define el truco. Gracias. – Philipp

1

Suponiendo que está autovinculando (es decir, ha definido BOOST_ALL_DYN_LINK o equivalentes específicos de la biblioteca).

Por 'sistema' diseño tiene que definir la macro preprocesador:

BOOST_AUTO_LINK_NOMANGLE 

para enlazar a los nombres de las librerías correctas.

Por diseño 'etiquetados' tiene que definir la macro preprocesador:

BOOST_AUTO_LINK_TAGGED 

para enlazar a los nombres de las librerías correctas.

No sé si podría reemplazar esto para algunas bibliotecas y mantener el valor predeterminado para otras. Esa sería una configuración muy engorrosa que me imagino.

Cuestiones relacionadas