从Python加载动态共享C ++库时出现问题

时间:2019-07-11 12:38:30

标签: python c++ shared-libraries loadlibrary

我已经建立了一个链接到.so的项目 SharedProj 。它链接了另外4个构建到静态库的项目: libA.a,libB.a,libC.a,libD.a 。这些项目在 SharedProj.so 中设置为引用,并与-l标志链接。

当我尝试使用 cdll.LoadLibrary 从Python加载 SharedProj.so 时,它失败,并出现以下异常:“无法找到 libA.so - 没有这样的文件”。 是的,这的确是事实:没有 libA.so 并且应该没有。有 libA.a ,它是静态链接的。

这是什么问题?如何正确构建 SharedProj.so ,以便Python可以正确加载它?

我尝试将 SharedProj.so 与-shared或-shared-libgcc标志链接。 尝试使用-static或-static-libgcc标志构建静态库。 试图添加或删除-fPIC标志。

1 个答案:

答案 0 :(得分:0)

我已经解决了Eclipse IDE中的问题。 显然,问题在于我的静态 libs libA.a,libB.a,libC.a 使用了另一个libs,例如 math lib,而我没有指定链接程序必须在哪里搜索它们。 在最后的链接指令中,我用-L标志传递了我的静态库的文件夹和 / lib 文件夹。使用-l标志,可以指定静态库的名称: libA,libB,libC 。还包括以下标志: -shared -shared-gcclib -m64

g++ -L"%workspace/libA/Debug" -L"%workspace/libB/Debug" -L"%workspace/libC/Debug" -L/lib -llibA -llibB -llibC -m64 -shared-libgcc -shared -o "SharedProj.so" ./SharedProj.o