c++ - 从具有多个源文件的共享 c++ 库中调用 python 中的函数
问题描述
我在 C++ 中创建了一个共享库,它有多个代码文件,并希望在 Python 中使用这些文件中的函数。如何使用 ctypes 调用这些函数?
我有两个实现简单功能的代码文件(每个文件都有一个头文件)。
foo.cpp foo.h
palindrome.cpp palindrome.h
回文.h:
extern int isPalindrome(int A);
回文.cpp:
int isPalindrome(int A) {
if (A < 0)
return 0;
int rev = 0;
int num = A;
while (A != 0){
rev = rev * 10 + (A % 10);
A = A / 10;
}
if (rev == num)
return 1;
return 0;
}
我使用以下方法创建了可执行文件:
g++ -c -Wall -Werror -fpic foo.cpp
g++ -c -Wall -Werror -fpic palindrome.cpp
并使用这些可执行文件创建共享库。
g++ -shared -fpic -o libcalc.so foo.o palindrome.o
现在我想使用 libcalc.so 来使用不同 cpp 文件中定义的函数在 python 中创建一个包装器模块。在尝试:
import ctypes
_sum = ctypes.CDLL('./libcalc.so')
_sum.isPalindrome.argtypes = (ctypes.c_int)
它给
AttributeError: ./libcalc.so: undefined symbol: isPalindrome
此错误的原因是什么,我该如何解决?为此目的,除了 ctypes 之外还有其他方法吗?
解决方案
推荐阅读
- c++ - 何时/为什么我应该在 C++ 中使用静态?
- linq - 具有动态 where 子句的多个连接表的 Lambda 表达式
- python - Pandas Multi Level Groupby:将分组值范围传递给函数
- excel - Excel:图表 x 轴标签
- python - pandas.DatetimeIndex 能否记住是否关闭?
- android - 如何从片段 KOTLIN 中调用意图
- python - 在scrapy管道中过滤项目
- angular - 如何使用服务人员以角度访问本地存储?
- php - Symfony:存储库应该只包含对数据库的查询吗?
- javascript - 多个输入使用 css jquery javascript 用分号分隔