2013-04-08 40 views
3

我想(用了几天的时间)来构建一个由C++代码生成的,带有python的boost/python。我是来自德国的学生,主要与Java有关(我之前用C++写过一些基本的OpenGL和gimp过滤器)。因此,请提前谅解我英语不好或C++初学者的错误。我的意思是,与C++相比,使用Java进行编程确实更加舒适。但足够的冲突。boost 1.53蟒蛇致命错误LNK1104 boost_python-vc110-mt-gd-1_53.lib

错误:

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项目属性:

配置属性>常规> Configurationtype>动态库(.dll)

C/C++>常规>加成Includedirectories> C:[..] \ boost_1_53_0

接头>常规>附加库目录> C: [..] boost_1_53_0 \ stage \ lib

从错误我假设我做了链接器或包括错误。我还将链接器>常规>附加库目录更改为boost_1_53_0 \ libs,因为我不确定,但发生了同样的错误。是的,我正确地包含了python。我也不确定是否必须在python旁边添加其他内容到Linker> Input for boost。

然后我用bjam构建boost,除了msvc-11.0之外没有任何选项,以确保拥有我需要的所有东西(虽然我读过boost/python不需要额外的构建)并仍然出现相同的错误。有人能帮我吗?我很想有一个一步一步的描述做什么。我真的很失望。

btw:我和这个人在Linker error LNK1104 with 'libboost_filesystem-vc100-mt-s-1_49.lib'之前几天有同样的错误,于是我停止了对它的工作,当我重新开始时,我得到了全新的错误(我无法告诉你这是怎么发生的)。

+0

检查磁盘上如果有问题的库(和libboost_filesystem-VC100-MT-S -1_49.lib')甚至生成。 – SChepurin 2013-04-08 14:57:27

+0

不,它不是。但我不知道我该如何得到它?我尝试用bjam静态和动态构建boost。没有改变任何东西 – 2013-04-08 15:58:00

+0

简单的方法是在Internet上搜索已建好的boost库。与http://code.google.com/p/mataes/source/browse/Miranda/boost_1_49_0/lib/?r=1959一样。下载并链接到该项目。 – SChepurin 2013-04-08 17:07:44

回答

0

请注意,我对你们的尝试非常感谢,但没有你的答案帮助一个同学而后给出提示对于我的正确答案和一些步骤非常简单,其他我不明白,但它的工作原理现在。

第一个问题是:新的升压1.53.0不适用于Python27或更旧版本。然后我将它与Python33联系起来,并删除了构建错误。

但当然,构建版本没有错误没有工作。当我试图启动我的helloboost.py其从VisualStudio中内置的.pyd进口并调用迎接方法,出现下列错误:

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

我不相信这是真的,提升python 1.53不适用于2.7。我已经在MSVC 10下完成了这个工作,至少是32位版本。 – jspencer 2014-05-14 19:51:46

3

您需要创建一个“user-config.jam”文件,指出Boost.Build可以找到python头文件和库文件的位置。从boost_1_53_0 /目录下,你需要以建立丢失的库调用B2这样

# 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 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中使用的确切名称。如果在PATH或当前目录中有python和Boost.Python库,则可以使用本教程中的脚本:。

import Test 
print Test.greet() 

,并得到了大家熟悉的“Hello World”的

4

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

+0

在VS 2015中,Boost 1.61.0为我工作过。 – 2017-04-26 16:32:13

0

你可能会迄今为止已制定了这一点 - 但是:

当一个.exe文件查找一个.dll到没有指定路径加载。因此.dll必须位于文件的搜索路径中。

另外:我试图为Visual Studio 2013构建1.49库 - 并且不断从我的项目中获取LNK错误。我不知道是谁在stackoverflow上建议它,但有人\的东西给了我这个想法,从最近的提升中复制构建系统,知道如何使.libs为更新的环境。 (谢谢)

我必须在1.58中运行引导后将boost build system从1.58拷贝,拷贝b2,bjam和boost-build.jam到更早的boost文件夹根目录以替换那里的相同命名文件。你也需要复制后面的tools \ build文件夹来支持构建系统。

注意到这里,希望它可以帮助别人类似的cituation一样,我发现自己在

参见:Search Path Used by Windows to Locate a DLL

相关问题