You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用cppyy从Python调用C++函数时遇符号未解析错误求助

解决cppyy调用C++共享库时的符号未解析问题

问题根源

报错是因为C++类的成员函数符号未被正确导出到共享库中,导致cppyy无法找到函数实现。Windows和Linux平台的共享库符号导出规则不同,需要针对性处理。

解决方案步骤

1. 修改头文件,添加跨平台导出宏

更新test.hpp,使用条件编译定义导出宏,同时兼容Windows和Linux平台:

#ifdef _WIN32
#define TEST_EXPORT __declspec(dllexport)
#else
#define TEST_EXPORT
#endif

class TEST_EXPORT Test {
public:
    void test();
};
  • Windows下(MinGW/g++环境)需要__declspec(dllexport)显式导出类的符号
  • Linux下共享库默认导出符号,无需额外声明

2. 正确编译Windows下的共享库

之前的编译命令包含了头文件,且缺少跨平台编译必备的-fPIC参数,改用以下命令生成dll:

g++ -shared -fPIC test.cpp -o testlib.dll

也可以分两步完成编译与链接:

g++ -c -fPIC test.cpp -o test.o
g++ -shared test.o -o testlib.dll

3. 适配Jetson Nano Ubuntu环境的编译

最终部署到Ubuntu 20.04时,需要编译生成Linux平台的.so共享库:

g++ -shared -fPIC test.cpp -o libtestlib.so

对应的Python调用代码要修改加载的库名称:

import cppyy

cppyy.include('test.hpp')
cppyy.load_library('libtestlib.so')

from cppyy.gbl import Test

t = Test()
t.test()

4. 验证符号导出(可选)

Windows下可以用dumpbin工具检查dll是否包含Test::test的符号:

dumpbin /exports testlib.dll

Linux下用nm工具验证:

nm -D libtestlib.so | grep "test"

如果能看到对应符号,说明导出成功。

内容的提问来源于stack exchange,提问作者Natanel Birarov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:09:21