在Linux中将Boost-python与C ++结合使用

时间:2020-03-05 18:54:33  来源:igfitidea点击:

我的开发商店整理了一个相当有用的基于Python的测试套件,我们希望使用它测试一些基于Linux的C ++代码。我们已经获得了Boost附带的测试项目以进行编译(在目录中键入" bjam",它可以工作),但是我们的实际项目存在问题。

从源代码(v1.35.0)构建boost库和bjam,当我运行bjam时,我在bin / gcc-4.1.2 / debug目录中得到一个.so。我运行python和" import",我得到:
ImportError:libboost_python-gcc41-d-1_35.so.1.35.0:无法打开共享对象文件:没有这样的文件或者目录

在库目录中查找,我有以下内容:
libboost_python-gcc41-mt-1_35.so``libboost_python-gcc41-mt-1_35.so.1.35.0``libboost_python-gcc41-mt.so

显然,我需要-d而不是-mt库,或者需要指向-mt库而不是-d,但是我不知道如何使Jamroot文件做到这一点。

当我安装Debian Etch的库版本时,我得到" / usr / include中没有Jamfile",并且有一个debian bug指出它们没有系统级jamfile。

我希望从源头上开始工作,因此,如果有人对解决图书馆问题有任何建议,我想听听他们的意见。

对答案1的回应:感谢提示。因此,我们知道我将如何使用MT库来代替它吗?我似乎以调试模式使用bjam或者Jamfile似乎是一个问题,即使我找不到任何标志。虽然我知道如何在对GCC的调用中包括特定的库,但我没有看到从Boost端配置该库的方法。

解决方案

回答

重要一点:-d当然是指调试,并且应该仅链接到项目的调试版本,并且只能与python的调试版本一起使用(或者不参见下文)。如果我们尝试将调试库链接到非调试版本,或者尝试将调试pyd导入非调试python,则会发生错误。

mt表示多线程,并且与d正交。我们可能要对项目使用mt non-d。

恐怕我不知道如何告诉gcc要链接的内容(我一直在使用Visual Studio)。尝试一件事:

man gcc

某个地方应该告诉我们如何在链接器上强制使用特定的库。

编辑:实际上,我们可以将项目的调试版本导入python的非调试版本。无论我们在哪里包含python.h,都应改为包含boost / python / detail / wrap_python.hpp。

回答

如果我们还想构建boost库的调试版本,则必须使用选项--build-type = complete来调用bjam。

在Debian上,我们可以在python2.x-dbg软件包中获得调试Python解释器。如果要使用系统Boost,Boost库的调试版本位于libboost1.xy-dbg中。

回答

找到了解决方案! Boost默认情况下会构建调试版本。键入" bjam release"将构建发行配置。 (据我所知,这在任何文档中都没有列出。)请注意,这与将构建类型更改为release不同,因为它不会构建发布配置。按照Torsten的建议进行"完整"构建也不会阻止它仅构建调试版本。

还值得注意的是-d库位于&lt;boost-version>/ bin.v2 / libs / python / build /&lt;gcc version>/ debug /中,发行版库位于`<gcc-version>中/ release,并且未安装到顶级" libs"目录中。

感谢其他建议!