python中哪个符号用于从包中导入模块_Python ImportError – 未定义符号 – 用于自定义C模块...

我在Ubuntu 11.04中使用OpenCV 2.3至2.4.2开发了一个

Python模块. OpenCV是从源代码构建的.我没有使用Ubuntu存储库中的OpenCV版本.

我的Python模块编译没有问题,并正确加载在Python中.但是,当我在Ubuntu 11.10或12.04上编译此模块时,尝试在Python中加载它时,会收到一条包含“undefined symbol”消息的ImportError.

这是我如何编译模块:

g++ -fPIC -shared `pkg-config --cflags --libs python` `pkg-config --cflags --libs opencv` -I/usr/local/include/opencv2/legacy -o mymodule.so mymodule.cpp

这是“pkg-config –cflags –libs opencv”的输出

-I/usr/local/include/opencv -I/usr/local/include /usr/local/lib/libopencv_calib3d.so /usr/local/lib/libopencv_contrib.so /usr/local/lib/libopencv_core.so /usr/local/lib/libopencv_features2d.so /usr/local/lib/libopencv_flann.so /usr/local/lib/libopencv_gpu.so /usr/local/lib/libopencv_highgui.so /usr/local/lib/libopencv_imgproc.so /usr/local/lib/libopencv_legacy.so /usr/local/lib/libopencv_ml.so /usr/local/lib/libopencv_nonfree.so /usr/local/lib/libopencv_objdetect.so /usr/local/lib/libopencv_photo.so /usr/local/lib/libopencv_stitching.so /usr/local/lib/libopencv_ts.so /usr/local/lib/libopencv_video.so /usr/local/lib/libopencv_videostab.so

我得到的错误是:

ImportError: /path/to/service/mymodule.so: undefined symbol: _ZN5CvSVMD1Ev

我的理解是,“未定义的符号”通常意味着给定的符号不能在任何链接的库中找到.但是我知道这个符号在libopencv_ml.so中,因为当我运行这个:

$nm -g /usr/local/lib/libopencv_ml.so | grep _ZN5CvSVMD1Ev

我得到:

000000000002fd40 T _ZN5CvSVMD1Ev

/usr/local / lib似乎在动态链接器缓存中.

$cat /etc/ld.so.conf.d/libc.conf

# libc default configuration

/usr/local/lib

而这样的文件也在缓存中.

$ldconfig -p | grep opencv | grep ml

libopencv_ml.so.2.4 (libc6,x86-64) => /usr/local/lib/libopencv_ml.so.2.4

libopencv_ml.so (libc6,x86-64) => /usr/local/lib/libopencv_ml.so

那么你可以给我任何线索我可能做错了什么? Ubuntu 11.04和11.10之间在运行Python时加载共享库的方式有什么变化?还是OpenCV的问题?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 如果在使用Python编写程序时遇到"ImportError: dynamic module does not define module export function (PyInit_example)"的错误,这通常是由于Python模块的导出函数定义所致。\[1\]要解决这个问题,你可以检查你的Python配置的ldflags参数。在Python 3.4及以上版本,ldflags参数应该包含"-Xlinker -export-dynamic"选项,以及其他必要的库文件路径和库文件。\[2\]而在Python 2.7版本,ldflags参数应该包含"-Xlinker -export-dynamic"选项,以及其他必要的库文件路径和库文件。\[3\]确保你的Python配置正确,并重新编译你的程序,这样应该可以解决这个错误。 #### 引用[.reference_title] - *1* [Python错误解决:动态模块定义模块导出函数(PyInit_example)](https://blog.csdn.net/update7/article/details/129680129)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [在C嵌入Python:将定义的引用链接到PyString_AsString时出错](https://blog.csdn.net/weixin_29496633/article/details/117019729)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值