默认情况下,libboostpython.a编译时没有-fPIC.但是我必须创建一个python扩展,它是一个动态库,带有-fPIC静态库的链接.如何libboostpython.a用-fPICfrom 编译静态库()boost.python?
我制作了一个带有无限循环的 boost.python 模块。但是我无法通过 ctrl-c 终止该进程。以下是一个示例。
C++
#include <boost/python.hpp>
#include <boost/python.module.hpp>
#include <boost/python.def.hpp>
#include <iostream>
usring namespace boost::python;
void foo() {
int it=0;
while (true) { //endless loop
++it;
std::cout<< it <<std::endl;
sleep(3);
}
}
BOOST_PYTHON_MODULE(ctopy)
{
def("foo",foo);
}
Run Code Online (Sandbox Code Playgroud)
Python:
import ctopy
ctopy.foo()
Run Code Online (Sandbox Code Playgroud)
结果:
1
2
3
4
.....................
Run Code Online (Sandbox Code Playgroud)
我无法通过 Ctrl-c 杀死前台进程。为什么模块不接受 Ctrl-c 发送的信号“SIGINT”。如何使其工作。
可能重复:
如何从内存加载已编译的python模块?
我在内存中有一些python文件,可能是StringIO.I如何导入存储在内存中的模块文件.我不想将其保存到磁盘然后加载.
它看起来像:
import StringIO.StrngIO([buf])
Run Code Online (Sandbox Code Playgroud) 我决定让我的程序与windows环境兼容.但我在windows上的编程经验很少.有些错误需要帮助.
环境:
我只复制并测试来自".\ boost_1_52_0\libs\python\example\tutorial"的这个"hello"代码
码:
#include <iostream>
#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
char const* greet()
{ return "hello, world"; }
BOOST_PYTHON_MODULE(hello_ext)
{
using namespace boost::python;
def("greet", greet);
}
using namespace std;
int main()
{
cout << "Hello world!" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误信息:
mingw32-g++.exe -Wall -fexceptions -g -ID:\boost\include\boost-1_52 -IC:\Python27\include -c E:\project\snail-MW\test1\main.cpp -o obj\Debug\main.o
mingw32-g++.exe -LD:\boost\lib\ -LC:\Python27\libs -o bin\Debug\test1.exe obj\Debug\main.o
obj\Debug\main.o: In function `inithello_ext':
E:/project/snail-MW/test1/main.cpp:11: undefined reference to `boost::python::detail::init_module(char …Run Code Online (Sandbox Code Playgroud) 我有一些python字节码文件为"a.pyc","b.pyc".我想用c ++代码运行这个文件.代码可以调用boost.python或python/c api.PyEval_EvalCode?
PyObject* PyEval_EvalCode(PyCodeObject *co, PyObject *globals, PyObject *locals)
Run Code Online (Sandbox Code Playgroud)
但是如何从字节码文件中获取PyCodeObject.
如何根据字符串定义变量.我已经定义了很多类.但是我想根据一些字符串创建这个类的变量.
代码看起来像这样.
class AA {};
class BB {};
class CC {
CC(void *pt);
virtual ~CC();
};
......
void test(char *ss,void *pt=NULL) {
//??????How to do?
}
int main() {
a1=test("AA"); //a1=new AA();
a2=test("AA"); //a2=new AA();
b1=test("BB"); //b1=new BB();
c1=test("CC",pt); //c1=new CC(pt);
}
Run Code Online (Sandbox Code Playgroud)
另外,您可以将其视为URL和句柄函数.std :: map是根据string获取类实例的常用方法.但是无法为变量创建新实例.我希望根据字符串获取一个新实例.