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/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的搜索路径
- 理解boost::asio-async_read在无需读取内容时的行为
- boost::进程间消息队列引发错误
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- cmake如何在fedora工作站中找到boost静态库包
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- Boost Graph Library,修复节点大小
- 什么是"#include <boost/functional/hash.hpp> "?
- 基于boost的程序的静态链接——zlib问题
- C++:如何在CLion IDE中安装Boost
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何在boost beast http请求中设置http头
- Boost Spirit,获取迭代器内部语义动作
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- LNK1104将Boost库添加到Qt项目时出错
- Boost.Python 和错误LNK1104:无法打开文件'boost_python-vc100-mt-gd-1_55.lib'
- Boost:链接由bjam命名的库时出现致命错误LNK1104
- 错误 LNK1104: 无法打开文件 '...\...\PCL 1.6.0\3rdParty\Boost\lib.obj'
- VS2013 LNK1104要求不同版本的外部lib(boost)
- 链接器需要在lib文件的名称中包含编译器和Boost的版本.致命错误LNK1104
- boost 1.53 python fatal error LNK1104 boost_python-vc110-mt-