boost 1.53 python fatal error LNK1104 boost_python-vc110-mt-

boost 1.53 python fatal error LNK1104 boost_python-vc110-mt-gd-1_53.lib

本文关键字:boost LNK1104 python-vc110-mt- error fatal python      更新时间:2023-10-16

我正在尝试(现在已经有几天了)用boost/python构建一个从c++代码生成的DLL,供python使用。我是一名来自德国的学生,直到现在大部分时间都与Java有关(我之前用c++写了一些基本的OpenGL和gimp过滤器)。因此,请提前原谅我的糟糕英语或c++初学者的错误。我的意思是,与c++相比,用Java编程确实要舒服得多。但是冲突够了。

错误:

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",其内容如下boost教程页面所述:

char const* greet()
{
    return "hello world";
}
#include <boost/python.hpp>
BOOST_PYTHON_MODULE(Test)
{
    using namespace boost::python
    def("greet", greet);
}

然后是我的新部分,在VS项目属性:

Configuration Properties> General> Configurationtype> Dynamic Library (.dll)

C/c++>通用>添加目录>C:[..]boost_1_53_0

链接器>通用>附加库目录> C:[..]boost_1_53_0stagelib

从错误我假设我做了一些错误的链接器或包括。我还将链接器>通用>附加库目录更改为boost_1_53_0libs,因为我不确定,但发生了同样的错误。是的,我正确地包括了python。我也不确定我是否要把python旁边的东西放入链接器>输入增强。

然后我用bjam构建boost,除了msvc-11.0之外没有任何选项,以确保拥有我需要的一切(尽管我读到boost/python不需要额外的构建),并且仍然得到了相同的错误。有人能帮帮我吗?我希望你能一步一步地告诉我该怎么做。我真的很失望。

顺便说一句。链接器错误LNK1104 ' libboost_filessystem -vc100-mt-s-1_49.lib'然后停止工作,当我再次开始时,我得到了一个全新的错误(我不能告诉你这是怎么发生的)。

因为它正在寻找一个静态库,添加BOOST_PYTHON_STATIC_LIB标志,转到VS属性->预处理器->处理器定义,添加BOOST_PYTHON_STATIC_LIB标志。

需要创建一个"user-config "。指明Boost.Build在哪里可以找到python的头文件和库文件。您可以在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中(包括boost和python)。

一旦您成功地构建了模块,您需要将其重命名为Test.pyd(与您在BOOST_PYTHON_MODULE中使用的名称相同)。如果你有巨蟒和Boost。在您的PATH或当前目录中的Python库中,您将能够使用教程中的脚本:

import Test
print Test.greet()

,得到熟悉的"hello world"。

请注意,我非常感谢你的努力,但你的回答没有一个帮助。然后一个同学给了我正确答案的提示,有些步骤真的很容易,其他的我不明白,但现在它工作了。

第一个问题是:新的boost 1.53.0不适用于Python27或更早的版本。然后我将其与Python33链接,并删除了构建错误。

当然,构建版本不能没有错误地工作。当我试图启动从VisualStudio构建的.pyd导入并调用greet方法的helloboost.py时,发生了以下错误:

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

当我检查hello_ext。我发现它需要boost_python-vc110-mt-gd-1_53.dll(可能取决于你需要什么,之前用bjam构建的)在同一个文件夹中。这招当时奏效了。也许有人可以解释为什么没有解释我需要这个dll与pyd在同一文件夹中(或者我错过了什么?是不是因为我之前犯了一个错误?)

无论如何,我很高兴它现在起作用了,希望它能帮助到其他人。

你现在可能已经算出来了——但是:

当.exe查找要加载的.dll时,没有指定路径。因此,.dll必须在文件的搜索路径中。

也:我试图为Visual Studio 2013构建1.49库-并不断从我的项目中获得LNK错误。我不知道是谁在stackoverflow上建议的,但有人某事给了我从最近的boost中复制构建系统的想法,该系统知道如何为最近的环境制作。lib。(谢谢)

我必须在1.58中运行bootstrap后从1.58复制boost构建系统,复制b2, bjam和boost-build。转到先前的boost文件夹根目录,替换那里的同名文件。此外,您还需要复制后来的工具build文件夹以支持构建系统。

写在这里,希望它能帮助到有类似情况的人。

参见:Windows查找DLL的搜索路径