使用boost::python的链接出错

来源:互联网 发布:java string.split 编辑:程序博客网 时间:2024/05/18 00:34

 

   被这个东西折磨了一个晚上,先是听度娘海扯胡诌,发现各种不靠谱。就自己研究,在几乎要放弃时解决了问题。

   首先是调试库的问题。因为网上下下来的安装版python是没有调试库的,所以调试编不过。居然还有人说直接把.lib改个名就变成调试库了。我去了,这么巧?函数地址都一样??不知编过的兄弟用的是哪个版本。我的是python3.3,这个版本肯定不行。就采用猥琐的办法吧:

#ifdef _DEBUG #undef _DEBUG #include <boost/python.hpp>#else #include <boost/python.hpp>#endif

   这样调试库的问题就pass了,接下来当我检查了无数遍。发现接口函数还是没实现。一共就两个库,搞毛线啊。不过我这情况稍微复杂一些,vs2008、vs2012、python2.7、python3.3、boost1.53都有。首先我先把boost那边的编译库研究一通,发现都已经生成了。如果你曾经加载到vs2008项目中进行编译,这些库都有了,不用bjam的,虽然这是我过了很久才意识到。不过库的名字不太对,在前面多了个lib,在/stage文件夹中,改过来就行。当然我用源码引入项目的方式,以及各种方式重新生成了一遍库,还是不行。我开始担心会不会由于2.7和3.3改了不少,接口有变化。最后发现....都不是。因为我不使用boost一样不行! 汗了...


    当确定跟这个boost库没关系之后,我又把目标放到python33.lib这个库上了。去掉所有不可能的,剩下的不管多不可能,都是真相。这话是谁说的,真TM有哲理,我想到了一个也仅剩的一个可能,这个库有问题。官方库也出错?我就上官网去算账去了。最后,一个猥琐的细节引起了我的注意。我机器是64位的。所以我的python装的也是64位的,但是项目是32位的,所以用32位的寻址连接64位的静态库,这不找死呢。我赶紧下了个32位的覆盖安装了,果然...就没问题了。


     坑我一晚上,写个博客祭奠一下我为此无谓浪费的脑细胞,为他们立此墓碑,警醒后人... 


本篇博客出自阿修罗道,转载请注明出处:http://blog.csdn.net/fansongy/article/details/9108083



原创粉丝点击