Увеличить 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