VC ++ 2010 хочет связать дополнительные библиотеки, которые я даже не указал - PullRequest
5 голосов
/ 02 июня 2010

Я пытаюсь построить свое приложение с MSVC 2010 вместо GCC. С GCC все отлично работает. Мое приложение использует библиотеки boost_system и boost_thread. Я построил boost с VC2010 в «системном» макете, это означает, что библиотеки называются просто libboost_system.lib (а не libboost_system_compiler_threading_version_wtf_snafu.lib) Библиотеки находятся в C: \ Boost \ lib, Makefile указывает

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

при вызове nmake он компилируется, но при попытке связать его выходит с

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

Я имею в виду серьезно, WTF? Я сказал ему связать libboost_systen.lib и libboost_thread.lib. Как получается, что он пытается связать libboost_data_time и почему он предполагает, что я собрал библиотеки в «размеченном» макете ?? Как я могу остановить MSVC, пытаясь быть умным и угадать, что я мог бы хотел связать?

Спасибо, Philipp

Ответы [ 2 ]

5 голосов
/ 03 июня 2010

Это особенность библиотек Boost с совместимыми компиляторами для автоматического связывания.

(Эти замысловатые имена библиотек охватывают множество потоков и параметров связывания, доступных на платформе; есть веские причины для использования этого соглашения в Windows ...)

Больше информации здесь:

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

Я не могу найти страницу для более свежей версии, но я считаю, что BOOST_ALL_NO_LIB и связанные параметры все еще действительны в 1.43.

1 голос
/ 23 марта 2014

Предполагается, что вы автоматически связываетесь (т.е. вы определили BOOST_ALL_DYN_LINK или специфичные для библиотеки эквиваленты).

Для макета 'system' вы должны определить макрос препроцессора:

BOOST_AUTO_LINK_NOMANGLE

для ссылки на правильные имена библиотек.

Для макета 'tagged' вы должны определить макрос препроцессора:

BOOST_AUTO_LINK_TAGGED

для ссылки на правильные имена библиотек.

Я не знаю, можете ли вы сделать это переопределение для некоторых библиотек и оставить значение по умолчанию для других. Это была бы очень громоздкая установка, которую я себе представляю.

...