Фатальная ошибка boost 1.53 python LNK1104 boost_python-vc110-mt-gd-1_53.lib

Я пытаюсь (в течение нескольких дней) создать DLL, сгенерированную из кода C++ с помощью boost/python для использования python. Я студент из Германии и до сих пор имел дело главным образом с Java (раньше я писал кое-что из OpenGL и gimp filter в C++). Так что заранее извините за плохой английский или ошибки C++ для начинающих. Я имею в виду, что программирование на Java действительно намного удобнее по сравнению с C++. Но хватит стычки.

Ошибка:

LINK : fatal error LNK1104: File "boost_python-vc110-mt-gd-1_53.lib" could not be openend

Мои пресеты:

с использованием MS Visual Studio 2012 (11.0)

-использование boost_1_53_0

-использование python2.7 (я слышал, 3.3 может вызвать некоторые проблемы)

Что я сделал:

Установил python и добавил его в PATH. Затем создал новый пустой проект в VS и файл класса "Test.cpp" со следующим содержимым, как описано на странице учебника по бусту:

char const* greet()
{
    return "hello world";
}

#include <boost/python.hpp>

BOOST_PYTHON_MODULE(Test)
{
    using namespace boost::python
    def("greet", greet);
}

Затем появилась новая часть для меня, в VS Project Properties:

Свойства конфигурации> Общие> Тип конфигурации> Динамическая библиотека (.dll)

C / C++> Общие> Дополнительные каталоги> C:[..]\boost_1_53_0

Линкер> Общие> Дополнительные каталоги библиотек> C:[..]boost_1_53_0\stage\lib

Из ошибки я предполагаю, что я сделал что-то не так с Linker или Включить. Я также изменил Linker > General > Additional Library Directorys на boost_1_53_0\libs, потому что я не был уверен, но произошла та же ошибка. И да, я правильно включил python. Я также не уверен, если я должен положить что-то еще, кроме python, в Linker > Input для boost.

Затем я создаю boost с помощью bjam без параметров, кроме msvc-11.0, чтобы быть уверенным, что у меня есть все, что мне нужно (хотя я читал, что boost/python не нуждается в дополнительной сборке), и все равно получаю ту же ошибку. Кто-нибудь может мне помочь? Я хотел бы получить пошаговое описание того, что делать. Я действительно отчаиваюсь из-за этого.

Кстати, у меня была та же ошибка, что и у этого парня, за несколько дней до того, как ошибка компоновщика LNK1104 с 'libboost_filesystem-vc100-mt-s-1_49.lib' затем перестала работать над ним, и когда я начал снова, я получил свою совершенно новую ошибку (я не могу сказать вам, как это произошло).

4 ответа

Решение

Обратите внимание, что я очень благодарен за ваши попытки, но ни один из ваших ответов не помог. Затем один из студентов дал мне подсказку о правильном ответе, и некоторые шаги действительно просты, другие я не понимаю, но сейчас это работает.

Первая проблема заключалась в следующем: новый буст 1.53.0 не работает с Python27 и старше. Затем я связал его с Python33 и удалил ошибку сборки.

Но, конечно, версия сборки не работала без ошибок. Когда я попытался запустить свой helloboost.py, который импортирует из.pyd, созданного VisualStudio, и вызывает метод greet, произошла следующая ошибка:

ImportError: DLL load failed: The specified module could not be found.

Когда я проверил hello_ext.pyd с помощью обходчика зависимостей и дико вставленной копии, я обнаружил, что для этого требуется boost_python-vc110-mt-gd-1_53.dll (вероятно, в зависимости от того, что вам нужно, и который был собран с помощью bjam ранее) в том же папка. Это сработало тогда. Может быть, кто-то может объяснить, почему нигде не объяснили, что мне нужен этот dll в той же папке, что и pyd (или я что-то упустил? Это только потому, что я раньше ошибался?)

Во всяком случае, я очень рад, что это работает сейчас и надеюсь, что это помогает другим людям.

Так как он ищет статическую библиотеку, добавьте BOOST_PYTHON_STATIC_LIB флаг, перейдите в свойства VS -> препроцессор -> определение процессора, добавить BOOST_PYTHON_STATIC_LIB флаг.

Вам необходимо создать файл "user-config.jam", который указывает, где можно найти заголовки и библиотеки python с помощью Boost.Build. Вы можете создать его в своем каталоге boost_1_53_0/ со следующим содержимым:

# Configure specific Python version.
 using python : 2.7
 : C:/Python27/python.exe
 : C:/Python27/include #directory that contains pyconfig.h
 : C:/Python27/libs    #directory that contains python27.lib
 : <toolset>msvc ;

Затем из этого каталога boost_1_53_0/ вам нужно вызвать b2 следующим образом, чтобы собрать недостающую библиотеку:

b2 toolset=msvc-11.0 --with-python variant=debug runtime-debugging=on link=shared --user-config=user-config.jam stage

(хотя я бы порекомендовал b2 toolset=msvc-11.0 --with-python --user-config=user-config.jam --build-type=complete stage так что вы можете получить за один шаг все конфигурации, которые могут вам понадобиться в будущем)

Когда у вас есть библиотеки, вам нужно добавить каталоги в Visual Studio (как для повышения, так и для Python).

После того, как вы успешно построили модуль, вам нужно переименовать его в Test.pyd (точное имя, которое вы использовали в BOOST_PYTHON_MODULE, Если у вас есть библиотеки python и Boost.Python в вашем PATH или в вашем текущем каталоге, вы сможете использовать сценарий в учебнике:

import Test
print Test.greet()

и получить знакомый "привет мир".

Вы, вероятно, уже разобрались с этим - однако:

Когда.exe ищет.dll для загрузки, путь не указан. Поэтому.dll должен быть в пути поиска файла.

Кроме того: я пытался собрать 1.49 библиотеки для Visual Studio 2013 - и продолжал получать ошибку LNK из моего проекта. Я не знаю, кто предложил это для stackru, но кто-то дал мне идею скопировать систему сборки из более поздней версии, которая знает, как создавать.libs для более новых сред. (благодарю вас)

Мне пришлось скопировать систему Boost-сборки из 1.58 после запуска начальной загрузки в 1.58, скопировать b2, bjam и boost-build.jam в более ранний корневой каталог Boost, чтобы заменить там файлы с такими же именами. Также вам нужно будет скопировать более позднюю папку tools\build для поддержки системы сборки.

Отметив здесь, в надежде, что это может помочь кому-то еще в подобной ситуации, в которой я оказался.

См.: Путь поиска, используемый Windows для поиска DLL

Другие вопросы по тегам