繁体   English   中英

在 Linux 中使用带有 C++ 的 boost-python

[英]Using boost-python with C++ in Linux

我的开发商店已经组装了一个相当有用的基于 Python 的测试套件,我们想用它测试一些基于 Linux 的 C++ 代码。 我们已经得到了他们与 Boost 一起发布的测试项目来编译(在目录中输入“bjam”并且它可以工作),但是我们的实际项目存在问题。

从源代码(v1.35.0)构建 boost 库和 bjam,当我运行 bjam 时,我在 bin/gcc-4.1.2/debug 目录中得到 a.so。 我运行 python 和“import”,我得到: ImportError: libboost_python-gcc41-d-1_35.so.1.35.0 : cannot open shared object file: No such file or directory

查看库目录,我有以下内容: 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 错误说他们遗漏了系统级 jamfile。

我更有希望让它从源头工作,所以如果有人有任何解决图书馆问题的建议,我想听听他们的意见。

对答案 1 的回应:感谢您的提示。 那么,你知道我如何让 go 让它使用 MT 库吗? 这似乎是 bjam 或我正在使用的 Jamfile 的问题,我认为我处于调试模式,即使我找不到任何标志。 虽然我知道如何在对 GCC 的调用中包含特定库,但我看不到从 Boost 端配置它的方法。

重要的一点:-d 当然意味着调试,并且只能链接到项目的调试版本,并且只能与 python 的调试版本一起使用(或不,请参见下文) 如果您尝试将调试库链接到非调试版本,或者尝试将调试 pyd 导入非调试 python,则会发生坏事。

mt 表示多线程,与 d 正交。 您可能想为您的项目使用 mt non-d。

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

man gcc

某个地方应该告诉您如何在 linker 上强制使用特定的库。

编辑:实际上,您可以将项目的调试版本导入 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”构建发布配置,(这在任何地方的任何文档中都没有列出。据我所知,)请注意,这与将构建类型更改为发布不同。 因为这不会构建发布配置。 按照 Torsten 的建议进行“完整”构建也不会阻止它仅构建调试版本。

还值得注意的是,-d 库位于<boost-version> /bin.v2/libs/python/build/ <gcc version> /debug/ 中,而发布库位于<gcc-version> /release 中,而不是安装到顶级“libs”目录中。

感谢其他建议!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM