Связывание CMake с общей библиотекой в ​​Windows: ошибка, связанная с невозможностью найти файл .lib - PullRequest
4 голосов
/ 21 декабря 2009

У меня есть определение библиотеки в CMake, которая создает общую библиотеку небольшого набора файлов, и у меня он прекрасно компилируется как в Linux, так и в Windows.

Тем не менее, у меня также есть другая библиотека, которая связывается с общей библиотекой, и она прекрасно работает в Linux, однако в Windows я получаю сообщение в виде строк или "ошибка не может найти Release / nnet.lib" во время ссылка времени. Есть ли что-то особенное, что я должен сделать, чтобы получить это ссылка на windows?

Редактировать, пример:

Основная общая библиотека (имена файлов изменены, чтобы защитить невинных):

ADD_LIBRARY(nnet SHARED
  src/nnet/file_1.cc src/nnet/file_3.cc  
  src/nnet/file_2.cc src/nnet/file_4.cc)

А потом я создаю модуль python, который связывает библиотеку:

# Build python module
ADD_LIBRARY            (other_lib SHARED ${CMAKE_SOURCE_DIR}/src/boost/boost_main.cc)
TARGET_LINK_LIBRARIES  (other_lib nnet   ${PYTHON_LIBRARIES})

Остальное - просто шаблон (например: изменение расширения модуля на .pyd в Windows, поиск библиотек / заголовков python и т. Д.) И тогда при сборке в VS 2008 я получаю:

фатальная ошибка LNK1181: не удается открыть ввод файл 'Release \ nnet.lib'

при создании other_lib. Обратите внимание, что при сборке nnet не выдается никаких ошибок.

1 Ответ

8 голосов
/ 22 декабря 2009

Ах, моя проблема была в том, что я забыл включить __declspec (dllexport) в подходящих местах при сборке библиотеки (можете ли вы сказать, что я не много занимаюсь программированием Windows?).

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