【发布时间】:2010-12-19 03:55:43
【问题描述】:
在我最后一个关于 python&c++ 集成的问题之后,我被告知在 Windows 上使用 dll。 (Previous question)
效果不错:
cl /LD A.cpp B.cpp C.pp
在windows环境下,设置boost、cryptopp源和cryptopp库的包含路径后。
现在我正在尝试在 linux 中做同样的事情,创建一个 .so 文件以通过 python2.5 上的 ctypes 导入。 我做到了:
gcc -Wall -Wextra -pedantic A.cpp B.cpp C.cpp /usr/lib/libcryptopp.so -shared -o /test/decoding.so
so 对象创建成功。如果删除“-shared”编译是可以的,但因为没有 main 在那里停止(显然;))。当然 libcryptopp.so 也存在。
但是当我去 python 并导入“so”文件时,它说该属性没有对象“解密”、“加密”或我放在那里的任何东西。在 dll 对象上使用“dir”确认它们不存在。
外部函数在 A.cpp 中定义为:
int encrypt (params...)
//..
return num;
int decrypt (params...)
//..
return num;
也尝试使用:
extern "C" encrypt (params...)
.....
谁能告诉我我做错了什么?
提前致谢!
抹布
【问题讨论】:
-
您是如何尝试“导入” .so 库的?使用 ctypes?
-
您可以在 .so 库中使用
nm实用程序来显示它公开的名称。 -
from ctypes import cdll mydll = cdll.LoadLibrary('/test/decoding.so') mydllnm 也不显示它们
标签: c++ python linux file shared-libraries