fib.cpp
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <iostream>
using namespace std;
extern "C" const char *hello (char* b){
static string s = "hello ";
s = s + b;
return s.c_str();
}
wrap.py
import ctypes
_libfib = ctypes.CDLL('./fib.so');
def ctypes_hello(a):
_libfib.hello.restype = ctypes.c_char_p;
return _libfib.hello(ctypes.c_char_p(a));
生成.so文件
g++ -std=c++11 -shared -c -fPIC fib.cpp -o fib.o
g++ -std=c++11 -shared -Wl,-soname,fib.so -o fib.so fib.o
从命令行运行wrap.py
from wrap import *
ctypes_hello("world")
它与python 2完美配合。我收到错误字节或 当我切换到时,整数地址而不是str实例 Python 3
答案 0 :(得分:2)
Python 3区分字节字符串和unicode字符串。所以在Python 3你的&#34;世界&#34; string是一系列Unicode代码点,而不是简单的字节字符串。所以在Python 3中尝试:
ctypes_hello(b"world")
将字节串传递给函数。