Увеличить 1.53 фатальная ошибка python LNK1104 boost_python-vc110-mt-gd-1_53.lib

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

Ошибка:

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

Мои пресеты:

-using MS Visual Studio 2012 (11.0)

-using boost_1_53_0

-using 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: [..]\boost_1_53_0

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

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

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

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

Ответ 1

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

Первая проблема: новый boost 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 (или я что-то пропустил? Это только потому, что я допустил ошибку раньше?)

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

Ответ 2

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

Ответ 3

Вам нужно создать файл "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 или в вашем текущем каталоге, вы будете умеет использовать script в учебнике:

import Test
print Test.greet()

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

Ответ 4

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

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

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

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

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

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