如何从boost.python中用-fPIC编译静态库?
默认情况下,libboostpython.a是没有-fPIC的.但是我必须制作一个Python扩展名,它是一个链接到静态库的动态库. 如何用boost.python boost.python? 编译静态库(libboostpython.a) 解决方案 您可以使用几个选项: 从源来编译助推器,然后将额外的编译器选项传递给BJAM.例如. bjam ... cxxflags='-fPIC'.这将以独立代码为单位的每个提升源文件. 使用共享库的形式使用Boost.在这种情况下,您可能想运送Boost共享库以及您的应用程序,以确保使用适当的Boost版本.您可以将您的可执行文件链接到'-Wl,-rpath,$ORIGIN' flag,以便当动态链接器搜索可执行文件所需的共享库时,它会在可执行文件所在的目录中查找它们.请参阅 其他解决方案 请注意,如果您已经运行BJAM,一旦需要首先清除目标 通过应用-d+2: 打印命令也很有帮助. ./bjam clean && ./bj
18 2024-04-06
编程技术问答社区
在cygwin中用boost.python手动构建一个Python扩展。
抱歉,这是一个一般的标题,但我不太确定我到底缺少什么或做错了什么.我的目的是使用boost.python在cygwin下构建Python扩展,并避免使用Boost.build工具,而不是Make而不是BJAM.后一种方式对我来说很好,但是现在我想这样做.我通过谷歌搜索和寻找类似的主题解决了许多问题,这帮助我找出了一些技巧并前进.然而,在最后一步似乎有一些问题.我将尝试描述我的所有步骤,希望这篇文章将来可能对他人有用,并且可以更好地描述设置. 因为我不太确定Python和Boost的原始(来自各种Cygwin存储库)的装置,所以我决定从头目录中安装它们,所以这是我要做的: 首先安装python.我会跳过此细节,它或更无直接的. /home/alexey_2/soft/python2.6-这是Pythonpath,也包括在路径 中 在Boost上工作: a)将升压源解开 /home/Alexey_2/Soft/boost_1_50_0 - this is
28 2024-04-05
编程技术问答社区
无法构建Boost.Python
我正在尝试构建boost.python遵循此链接. 当我尝试使用./b2或./bjam编译时,我会得到以下错误: error: No best alternative for /python_for_extensions next alternative: required properties: 2.6 linux matched next alternative: required properties: 2.6 linux matched 当我添加此行时,错误消失了: using python : 2.6 : /usr/bin/python2.6 : /usr/include/python2.6 : /usr/lib/python2.6 : on ; 在 中 /home/kchaitanya/boost/boost_1_5
16 2024-04-04
编程技术问答社区
如何使用常规的makefile构建一个依赖boost的项目?
我正在从事一个C ++项目,最近我们需要在其中包括一小部分的Boost.因此,提升部分确实很小(Boost :: Python),因此,使用Bjam来构建所有东西看起来像个过度杀伤(此外,从事该项目的每个工作都对Make感到满意,并且对JAM没有知识). ). 我已经做了很多测试,但是我找不到一种方法,将以前提到的图书馆包含在我的makefile中并使构建成功. 您的所有帮助都被深深地付诸实践. :) 解决方案 我也遇到了同样的问题,并在此演示. 其他解决方案 您可以使用Boost的仅提取所需的增强子集. 这将使您的构建时间和大小最小化. ,那没有回答您的问题.您可能需要考虑分别构建Boost.python库,然后将其直接检查到您的源控制系统中.那么没有人需要建造它们. 其他解决方案 如果您对BJAM不舒服,则可能需要考虑使用> boost.cmake . 另外,您至少应该能够更轻松地看到他们在做什么,然后使用BJAM文件.
12 2024-04-04
编程技术问答社区
用运算符*重载来包装矩阵乘法
我一直在试图包装矩阵C ++类,以python为单位.我希望能够使用富乘运算符(即M1 * M2)调用矩阵乘法,但到目前为止,只能设法绑定一个函数m3 = multiply(m1, m2),从Python我可以通过派生的功能获得相同的功能班级: class mat4(mylib.mat4): def __init__(self): super().__init__(self) def __mul__(self, other): return multiply(self, other) 但是,我希望只有C ++的更清洁,如果有人有任何建议,谢谢. 解决方案 所以,我试图包装不存在的glm::mat4::operator*(...).这是原型: GLM_FUNC_DECL mat operator*(mat const& m, T const& s);需要两个mat4参数并
4 2024-04-02
编程技术问答社区
boost::python::enum large uint32 crash
我试图使用Boost :: Python(Boost 1.58)来包装C ++枚举.枚举是UINT32_T类型的枚举,所有值都没有问题,除了大数字以外,从0x4000 0000开始. 尝试包装0x4000 0000的枚举值(UINT32)导致eNum.HPP崩溃,第95行(Boost 1.58).我使用VS2012(Win7)观察这种行为. 有什么想法? 示例: enum EnumName: uint32_t { valueOK = 0x20000000, valueCrash = 0x40000000 }; boost::python::enum_("EnumName") .value("valueOK", valueOK) .value("valueCrash", valueCrash) ; 解决方案 我无法复制这个问题.使用 在Coliru > #includ
16 2024-04-02
编程技术问答社区
python中编译模块之间的依赖关系
假设我在一个Python项目中有两个模块,这些模块用C ++编写,并以Boost :: Python暴露. mod1.hpp #ifndef MOD1_HPP #define MOD1_HPP #include int square(int x); #endif mod1.cpp #include "mod1.hpp" using namespace boost::python; int square(int x) { return x*x; } BOOST_PYTHON_MODULE (mod1) { def("square",&square); } mod2.hpp #ifndef MOD2_HPP #define MOD2_HPP #include #include #include "mod1.hpp" int myfu
28 2024-04-02
编程技术问答社区
由vector_indexing_suite返回的奇怪对象
我有 std::vector 我从C ++函数返回: getallTs() 我已经公开了T类: class_ 和矢量类似: class_ >("TsList") .def(vector_indexing_suite,true>()) ; Noproxy参数是什么意思? 我像这样公开了功能: def("getallTs", getallTs, return_value_policy{}); 我观察到怪异的行为. 当我从python打电话 tlist = getallTs() 我得到一个tslist对象. len(tlist) 有效. tlist[]. 也有效.
10 2024-04-02
编程技术问答社区
在boost-python的嵌套命名空间导出代码中出现错误
我正在努力导出两个班级动物园(Extzoo和Intzoo 名称空间),类动物(Extanim和Intanim名称空间) 定义在两个层次的嵌套名称空间中.我想揭露这些方法 从我可以访问它们的Python解释器.我已经写了代码, 创建一个共享库,但是当我将其导入python时,我会遇到错误. 感谢您对此的指导. 我遵循以下链接中给出的答案 揭示C ++嵌套名称空间:创建boost-python nested namespace Zoo.h: namespace extzoo { namespace intzoo { class zoo { public: const std::string hello_zoo(); const std::string getname_zoo(); }; } } zoo.cpp: using namespace extzoo; using namespace intzoo; const std::string zoo::h
10 2024-04-02
编程技术问答社区
在boost::python中实例化shared_ptr's
我对Boost Python有一个疑问.我一直在努力将项目的一些功能导出到Boost Python中,但我还没有找到解决以下问题的方法: 我在整个游戏中都有一组statuseffect对象.在游戏启动时,我希望能够调用一个python脚本,该脚本将填充/添加到状态效应对象集中.我在公开statuseffect类中没有问题,它是派生的类并调用脚本. 问题是我正在存储该statuseffect对象std::vector > Effects; 除了在此处描述的添加静态创建方法的方法外,我不知道如何创建boost::shared_ptr的新实例. =" nofollow"> http://wiki.python.org/moin/boost.python/pointersandsandsmartpointers 给定我拥有的大量构造函数和各种各样的派生类别,这似乎是一种不太优惠的解决方案.我希望能够
4 2024-04-02
编程技术问答社区
在osx上用boost安装PythonMagick
我正在尝试按照以下说明安装pythonmagick. https://gist.github.com/tomekwojcik/2778301 当我到达$ make时,我会得到此错误 Making all in pythonmagick_src CXX libpymagick_la-_DrawableFillRule.lo _DrawableFillRule.cpp:3:10: fatal error: 'boost/python.hpp' file not found #include ^ 1 error generated. make[1]: *** [libpymagick_la-_DrawableFillRule.lo] Error 1 make: *** [all-recursive] Error 1 我如何在项目中安装pythonmagick?任何有效的方式.我在互联网上的任何地方都找不到有用的说明.
10 2024-04-02
编程技术问答社区
C++和Boost.Python--如何将变量暴露给Python并在循环中更新它?
简介 我使用BOOST.PYTHON软件包有一个来自C ++的Python代码.从.py调用MyFunc时,我可以传递一些变量: Py_SetPythonHome(pySearchPath); try { Py_Initialize(); numpy::initialize(); object module = import("__main__"); object name_space = module.attr("__dict__"); exec(python_full, name_space, name_space); object MyFunc = name_space["MyFunc"]; object result = MyFunc(var1, var2, var3)); //HERE //Python results storage numpy::ndarray ret = extract(result); int input_
8 2024-04-02
编程技术问答社区
TypeError。没有为C++类型找到to_python(by-value)转换器
我正在尝试使用boost.python将我的C ++类公开为Python.这是我想做的简单版本: struct Base { virtual ~Base() {}; virtual char const *Hello() { printf("Base.Hello\n"); return "Hello. I'm Base."; }; }; struct Derived : Base { char const *Hello() { printf("Derived.Hello\n"); return "Hello. I'm Derived."; }; Base &test() { printf("Derived.test\n"); // ... // After some calculation, we get result
12 2024-04-02
编程技术问答社区
将FindBoost CMAKE指向boost_python Windows 10, VS 2017
我的高水平目标是安装$ cmake -DBGS_PYTHON_SUPPORT=ON -DBOOST_ROOT="C:/Program Files/boost_1_64_0/" .. -- BGSLIBRARY WITH PYTHON SUPPORT: ON -- OpenCV library status: -- version: 3.3.0 CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.9/ Modules/FindBoost.cmake:1877 (message): Unable to find the requested Boost libraries. Boost version: 1.64.0 Boost include path: C:/Program Files/boost_1_64_0 Could not find the following Boost libraries: boost_python
6 2024-04-02
编程技术问答社区
在boost'的例子/教程中执行bjam失败了
按照 i在文件夹的目录中输入bjam(c:\ program files \ boost \ boost_1_65_1 \ libs \ python \ example \ tutorial)并得到以下错误: > ...found 12 targets... ...updating 5 targets... compile-c-c++ hello.obj hello.cpp hello.cpp(7): fatal error C1083: Cannot open include file: 'boost/python/module.hpp': No such file or directory call "C:\Users\trg\AppData\Local\Temp\b2_msvc_14.1_vcvars32_.cmd" >nul cl /Zm800 -nologo @"hello.obj.rsp" ...failed compile-c-c++ hello.obj.
10 2024-04-02
编程技术问答社区
无法在Python中导入dlib
我成功地为python安装了dlib,按照说明 >>> import dlib Traceback (most recent call last): File "", line 1, in File "/usr/local/lib/python2.7/site-packages/dlib/__init__.py", line 1, in from .dlib import * ImportError: dlopen(/usr/local/lib/python2.7/site-packages/dlib/dlib.so, 2): Library not loaded: @rpath/libpng16.16.dylib Referenced from: /usr/local/lib/python2.7/site-packages/dlib/dlib.so Reason: image not found 我以前有(并卸载)Anaconda
20 2024-04-02
编程技术问答社区
用make_constructor提升Python返回相同的实例
我正在尝试制作,因此此代码在init函数和回调函数中返回相同的实例 test1.py import test1 c = test1.C() print 'init:', c def func(c): print 'func:', c test1.register_callback(func) test1.cpp #include #include #include using namespace boost::python; class C; std::vector> v; class C : public boost::noncopyable { public: C() { std::cout
12 2024-04-02
编程技术问答社区
使用boost-python和lapack的编译错误
我创建了一个使用Boost来提取Python变量和求解矩阵的程序.但是我在编译过程中遇到了一些麻烦 这是我的包含和第一行代码: #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION #include "lapacke.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include
22 2024-04-02
编程技术问答社区
boost::python 和回调驱动执行
我在项目上遇到问题. 我的项目正在使用回调机制从C ++运行一些Python代码. 只要引起我的回调执行的初始函数调用来自Python解释器,一切都很好.例如: h = CallbackHandler() def mycallback(): print "yeah" h.setCallback(mycallback) h.runCallback() # will print yeah a,这不是那么简单.我的项目使用 rtaudio 与音频环境进行通信. rtaudio的执行是回调驱动的:我给rtaudio一个回调函数,当我启动rtaudio时,每次需要计算回调. 使用rtaudio的回调驱动执行时,我在代码试图从C ++运行Python回调后立即获得SEGFAULT. 要启动以回调驱动的执行,我必须呼叫函数start(),这是无障碍物.这意味着回调驱动的执行发生在另一个线程中. 然后,当调用Python调用start()时,我正在
6 2024-04-02
编程技术问答社区
有没有一种好的方法可以将数据从Python上下文中发送到C++中而不涉及太多的复制?
标题可能会令人困惑.在这里,我将更清楚地陈述我的问题. 我想创建一个基于Python(例如烧瓶和Cherrypy等现有框架),以及C ++计算引擎的网站,以实现处理速度.因此,我需要创建一个供Python调用C ++功能的接口.幸运的是,Boost.python可以完成这项工作.但是,每当我将python(例如矩阵)发送到C ++的数据时,我都必须使用Python列表,这意味着我必须将矩阵数据转换为列表,在C ++上下文中,C ++上下文中的上下文将列表转换为内部矩阵对象.结果,发生了许多数据副本,这不是一种智能或有效的方法.因此,我的问题是,如果考虑到复杂性,我们不会通过boost.python将C ++矩阵类映射到Python类,那么有没有更好的方法来完成类似的工作,而没有少量复制? 解决方案 但是,每当我将python的数据(例如矩阵)发送到C ++时,我 必须使用python列表,这意味着我必须转换矩阵 数据中的数据和C ++上下文中的数据将列表转换为内部 矩阵
2 2024-04-02
编程技术问答社区