在MinGW中编译Boost.Python

原创 2003年02月19日 09:12:00
 

有时候,我写程序纯粹是为了好玩。比如,对于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(动态链接库是语言及编译器无关的)得到的。先下载PExports 0.42h( http://starship.python.net/crew/kernr/mingw32/pexports-0.42h.zip。解压缩后可以在Bin目录中找到一个可执行文件pexports.exe。为了方便,我们可以把这个目录加到path中;

2、在系统目录中找到python22.dll,把它复制到一个单独的目录中(我把它放在我的python/DLLs里,为的是一并处理掉其它的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.python编译及示例

linux编译boost的链接:http://blog.csdn.net/majianfei1023/article/details/46761029 昨天编译安装好boost,今天准备使用boo...
  • majianfei1023
  • majianfei1023
  • 2015年07月07日 00:45
  • 10565

在MinGW中编译Boost.Python

     有时候,我写程序纯粹是为了好玩。比如,对于Python和Boost。身边很多朋友,看我兴致勃勃的学习它,会常看外星人一样地问我:“这有什么用吗?”     我开始觉得很郁闷,后来就学会一笑处...
  • Augusdi
  • Augusdi
  • 2010年10月26日 14:13
  • 1668

在MinGW中编译Boost.Python

Boost.Python不能安装。这个问题的具体表现在于,用MinGW编译Boost.Python时,会提示找不到若干定义,最后归为6个以上的错误。具体的数目好像会有不同。我的机器上通常会是6个,而有...
  • kipykspy
  • kipykspy
  • 2010年11月04日 19:30
  • 355

vs2015使用MinGW编译的动态库

工作过程中经常会遇到使用其他开源项目的情况,有些开源项目有vs工程,比如opus,可以直接编译出vs可识别的动态库或静态库,但有些开源项目则没有,此时想要做的就是利用该源代码编译一个或多个库来使用。 ...
  • xy_kok
  • xy_kok
  • 2017年11月04日 13:48
  • 348

Windows下使用MinGW在命令行编译运行C++程序

Windows下使用mingw编译c++程序的过程
  • ytx2014214081
  • ytx2014214081
  • 2017年10月17日 16:42
  • 417

编译boost.python库

以我使用的boost1.48为例。      首先需要运行bootstrap.bat来生成boost库的编译引擎:b2.exe,bjam.exe(很重要)。      下面是我用来编译boost....
  • you_lan_hai
  • you_lan_hai
  • 2012年08月28日 21:07
  • 6350

ACE在MINGW下的编译

在安装ACE 以前,先下载ACEMSYS MINGWMAKEMYSY装在了D:/MSYSmingw装在D:/MINGWACE放到了D:/ACE_wrappers下并设置ACE_ROOT=D:/ACE_...
  • jc
  • jc
  • 2004年12月15日 23:41
  • 3221

OpenCL with MingW! (and more)

From AMD forums: OpenCL Mingw ============ In fact, that is quite easy to make a libOpenCL.a for ...
  • szu030606
  • szu030606
  • 2014年04月10日 14:43
  • 1163

Qt的mingw编译OSG编码

第一步安装QtSDK。
  • chentianqiao555
  • chentianqiao555
  • 2014年10月01日 11:11
  • 1307

利用Boost.Python实现Python C/C++混合编程

利用Boost.Python实现Python C/C++混合编程
  • xuluhui123
  • xuluhui123
  • 2017年04月28日 10:34
  • 3618
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在MinGW中编译Boost.Python
举报原因:
原因补充:

(最多只允许输入30个字)