由于此处无法解释的原因,我需要在“C”中创建一个可在 Python 中调用的共享库(称为 libA)。这个共享库需要调用另一个自定义共享库(我们将其命名为 libCuda)。此外,libA 还调用了许多其他外部共享库,例如 MySQL 等。
在包含 libCuda 之前,在 Python 中调用的所有 C 函数都可以正常工作,MySQL 子调用也可以正常工作,等等。但是,一旦将 libCuda 添加到 libA,Python 就会抱怨:
caughtError c process - [directory]/libA.so: undefined symbol: cudaFunction1
libCuda,正如您可能已经猜到的那样,是使用 nvcc 编译的 nVidia Cuda 代码并设置为可 C 链接(即在函数原型中导出“C”)我已经使用独立测试台测试了这个共享库(libCuda)(编写在 C) 中,一切都按预期工作。这是用于编译 Cuda 库的指令:
nvcc -arch=sm_30 -shared -o libCuda.so *.cu -Xcompiler -fPIC
如果我使用:
$ ldd libA
我没有看到任何信息表明 libA 需要加载 libCuda(或 MySQL)
用于编译 libA 的命令如下(libCuda 位于本地目录中):
gcc *.c -c -L. -lCuda -lmysqlclient [many other shared libraries] -fPIC
gcc -shared -Wl,-soname,libA.so -lCuda -lmysqlclient [many other shared libraries] -o libA.so *.o
我尝试将两个库文件都放在 /usr/lib 中并显式导出 LD_LIBRARY_PATH。没运气。任何帮助将不胜感激!