Cmake add_library с буст-исходными файлами представляет ссылки на несуществующие файлы - PullRequest
1 голос
/ 12 августа 2010

мы создаем кроссплатформенную утилиту, которая должна иметь небольшую площадь.Мы извлекали заголовочные файлы из boost по мере необходимости, но теперь мы должны ссылаться на некоторый код потока C ++ boost.Самым простым непосредственным решением было создать собственную библиотеку с помощью команды CMake «add_library», чтобы создать статическую библиотеку, состоящую из нескольких исходных файлов потоков поддержки.Они компилируются без проблем.

Трудность возникает, когда я пытаюсь связаться с этой библиотекой из исполняемого файла.Visual Studio 2008 возвращает сообщение об ошибке, в котором говорится, что он не может ссылаться на «libboost_thread-vc90-mt-sgd-1_40.lib».Что меня действительно озадачивает, так это то, что я просмотрел весь исходный код и файлы конфигурации CMake, и я не могу найти никаких ссылок на эту библиотеку libboost, что наводит меня на мысль, что она каким-то образом сгенерирована автоматически.

Это нормально работает в Linux, кто-нибудь может указать, почему у меня возникают такие проблемы в Windows?

Ответы [ 2 ]

3 голосов
/ 13 августа 2010

@ Gearoid

Вы нашли правильную причину своей проблемы, но не верное решение. BOOST_AUTO_LINK_NOMANGLE является внутренним, то есть для авторов библиотеки, определением, управляющим автоматической связью. Определение уровня пользователя - BOOST_ALL_NO_LIB, которое, когда оно определено, отключает функцию автоматического связывания для всего кода Boost Libraries, который вы используете. Это описано в заголовке конфигурации user.hpp ( см. User.hpp внизу и документацию Boost Config ). Вы также можете управлять этим на уровне библиотеки, как описано в этом заголовке.

0 голосов
/ 12 августа 2010

Хорошо, получается, что Boost использует эту функцию автоматической ссылки для Visual Studio, которая встраивает ссылки на искаженное (то есть, платформа-компилятор-многопоточность и т. Д.) Имя библиотеки буста.

Заголовочный файл, который управляет этим, называется "auto_link.hpp", который находится в каталоге config дерева включения надстройки. Существует специальное определение препроцессора под названием «BOOST_AUTO_LINK_NOMANGLE», которое переключает это поведение.

Еще один триумф посредственности для Microsoft.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...