有时候,我写程序纯粹是为了好玩。比如,对于Python和Boost。身边很多朋友,看我兴致勃勃的学习它,会常看外星人一样地问我:“这有什么用吗?”
我开始觉得很郁闷,后来就学会一笑处之。何必要去争呢?为了生存而生活,并不是什么错误的态度,不过,抱这样态度的朋友,不可能向他们说清楚,这种生活的乐趣。如果只是为了谋生,我就应该一辈子安心于使用RAD。但是,我喜欢C++,喜欢Python。这样的语言,可以让我得到乐趣。虽然我可能永远也成不了Bjarne,但是,我可以做一个快乐的人,这不是很好吗?
做为一个纯粹的C++“爱好者(而非职业C++程序员)”,我很少使用VC。很长时间里,我一直在用内置GCC的Dev C++。后来,又专门下载了一个MinGW,集成在Dev C++中,做为编译器内核。不知道CSDN上有多少像我这样的“玩家”。不过,从前一段时间论坛上的贴子来看,所有像我这样使用MinGW+Python+Boost的朋友,都遇到一个很头痛的问题:Boost.Python不能安装。
这个问题的具体表现在于,用MinGW编译Boost.Python时,会提示找不到若干定义,最后归为6个以上的错误。具体的数目好像会有不同。我的机器上通常会是6个,而有一位朋友,他的机器编译时一般是9个错误。这个问题困扰了我们这些C++菜鸟很久。因为同样的问题在VC上就不会出现。最后,一个偶然的机会,我发现,其实,这个问题一点也不神秘:在Boost.Pyhton的编译过程中,需要调用一个静态库pythonxx.lib(xx是两位数字,视Python的版本而定,我这里是Python22.lib)。而Python的windows版本,是使用VC编译的!所以在VC中,不会出现这样的问题。而MinGW通常不能正确的识别这个VC编译出的静态库。同样的问题不只出在编译Boost.Python。只要使用安装版的Python与MinGW集成使用,都会出现这个问题。
怎么办?用MinGW重编译Python源码?这听起来是个好主意,从根本上解决问题。不过让我很失望的是,在我这里,用Cygwin还可以正确编译Python源码,MinGW就不行。大概是因为我的方法不当。如果哪位高人了解,还请指教。而从另一个角度看,只要能得到一个MinGW编译的lib文件就可以。而这个方法,其实在Python的文档中已经提到了--虽然没有说与Boost.Python有关,但是,这的确是最简单的方法。下面我把它整理出来,介绍一下。
1、我们需要一个工具,用来生成Python22.lib的Def文件。这个Def,其实是从Python22.DLL(动态链接库是语言及编译器无关的)得到的。先下载.NET/crew/kernr/mingw32/pexports-0.42h.zip">PExports 0.42h( http://starship.python.net/crew/kernr/mingw32/pexports-0.42h.zip)。解压缩后可以在Bin目录中找到一个可执行文件pexports.exe。为了方便,我们可以把这个目录加到path中;
2、在系统目录中找到python22.dll,把它复制到一个单独的目录中(我把它放在我的pythonDLLs里,为的是一并处理掉其它的DLL);
3、在命令行模式下,转到放置python22.dll的目录,执行:pexports python22.dll >python22.def;
4、现在,我们在这个目录下,可以找到python22.def,用文本编辑器打开它,会看到在编译Boost.Python时找不到的那些定义,就在其中;
5、使用GCC的附带工具,生成静态文件,现在执行:dlltool --dllname python22.dll --def python22.def --output-lib python22.lib。
我们现在就可以在这个目录下,找到梦寐以求的python22.lib了。
用同样的方法,我生成了MinGW版本的其它若干个lib文件,如zlib.lib,parser.lib等。现在,把它们放在一个新的目录中(也可以在生成它们时,直接指定一个目录)。把Boost.Python所需要的libs目录变量设定为这个目录,就可以正确编译Boost.python了!
欢迎所有使用MinGW的朋友来到Boost.Python的世界!这个时候,大概你已经在试验Boost的示例,甚至自己开始用Boost扩展Python了吧。
分享到:
相关推荐
这些文件其实在boost的目录下面和C:\Python27\include目录中. 为了使用方便,将整个\boost_1_49_0\boost\目录复制到MinGw的include目录下面; 将C:\Python27\include目录下的文件全部复制到MinGw的include目录下面...
Dev-Cpp.6.7.5.MinGW-w64.GCC.10.3.Setup.exe
gcc-core-6.3.0-1-mingw32-bin.tar.xz c语言编译库 gnu gcc
gcc-ada-4.8.1-4-mingw32-dev.tar.lzma MinGW
内含有mingw-get-setup.exe以及gdb-7.6.1-1-mingw32-bin.tar,容易被墙,都下好了,换点积分
安装MinGw报错无法下载gdb-7.6.1-1-mingw32-bin.tar.lzma 。可以下载这个文件,把其中解压出来的gdb.exe放在MinGw/bin目录下即可。注意解压lzma文件需要使用特殊软件,如:“7-zip”。
qt4.8.5_mingw4.6.1静态编译.docxqt4.8.5_mingw4.6.1静态编译.docx
在windows下用MinGW编译python源代码需要对代码做一些简单的修改,本文列举了修改方法,并详细的讲解编译过程中会遇到的问题。
使用MinGW编译一份库代码,可能是由于configure不好,导致只能生成.a文件,google发现一些方法,备份一下。
SDL-devel-1.2.11-mingw32.tar.gz SDL-devel-1.2.11-mingw32.tar.gz
mingw32下载gdb失败可离线安装,GDB是GNU开源组织发布的一个强大的UNIX(不仅限于UNIX)下...它搭配MINGW使用,可以使用户完成整个C/C+程序的编译和运行工作。有了GDB,用户可以在调试本地的C程序时不需要第三方C/C++工具
qt_opencv3.43+cmake mingw32编译版本 为大家提供一个简单粗暴,搭建qt+opencv的方法
mingw32_4.2.1.dfsg.orig.tar.gz
GDB是GNU开源组织发布的一个强大的UNIX(不仅限于UNIX)下的C/C++程序调试工具。它搭配MINGW使用,可以使用户完成整个C/C+程序的编译和运行工作。有了GDB,用户可以在调试本地的C程序时不需要第三方C/C++工具。
mingw_w64.instrset.rar
mingw编译器离线库,mingw-64.msys2.mingw32。 文件夹路径:mingw-64/msys2/mingw32/
在VC中则不需要修改代码,cl编译的时候使用/Gz即可。 写到这里,基本上已经讨论的差不多了。至于静态库.lib和.a之间的转换。据说这是同一种类型的归档文件,不同的只是归档里包含的内容。lib里包含的是.obj文件,a...
mingwrt-3.17-mingw32-dll.tar.gz
环境: 1.windows7 + Qt5.5.1mingw 包含: 1.mnmlstc core c++11 2.mongo-c-driver 1.14.0 3.mongocxx 3.4.3 说明: 不依赖 BOOST !!!
cmake时发现minGW的bin下少minGW32-make.exe,导致失败,将其放入minGW的bin下即可用。