CUDA CUDPP .so building
我想在我的项目中使用 CUDPP 库。我已经从项目页面下载了源代码。不幸的是,当我运行"make"时,只有静态库构建。我查看了 Makefile 文件并没有找到任何动态库配置。我不想在项目中保留静态库 - 它完全是不可移植的方式。
我的问题是:如何构建 CUDPP 的 .so 动态库,而无需编写自己的 Makefile/手动编译它?也许有人已经这样做了?
编辑:我已将 "g " 替换为 "g -fPIC",将 "gcc" 替换为 "gcc -fPIC",并将 "nvcc" 替换为 "nvcc -Xcompiler - fpic"。当我从存档中解压缩 obj 文件并将它们链接到共享库时,我没有收到任何错误。但是,当与此库链接时,我的应用程序在启动时崩溃。
编译时将标志 -Xcompiler -fpic 传递给 nvcc。如果您链接到任何 cuda 库,请确保您已链接到共享库,否则您无法链接它。希望这就是您所需要的。
- 我将这些添加到 nvcc 和 -fPIC 到 gcc/g 。当我从 .a 中提取文件并链接它们(g -shared *_o -o libcudpp.so)时,它没有给出任何错误。但是,当我尝试使用此链接运行我的应用程序时,应用程序崩溃(gdb 说,在加载此库时)。我错过了什么?
-
我认为您必须使用 -Xcopmiler -fpic 标志重新编译您正在使用的任何静态库中的所有库。您不能只从静态库中提取它们然后将它们重新链接为共享,因为其中的对象从未使用 -fpic 标志编译过。我很确定 sdk 或其他一些 cuda 库已经有可用的共享库(.so)。如果不是,我认为您可以使用 -fpic 标志从源代码重新编译 cuda 库(我没有这样做,但我相信可以做到)。
-
我重新编译了整个 cutil,它与 cudpp 和 cudpp 本身静态链接。我认为我不必重建 libcuda,因为它已经是 .so。
-
是的,我不相信你必须重建 libcuda ...它已经是一个共享库。为什么不尝试动态链接到 cudpp 呢?这太难了吗?抱歉,如果这不起作用,我不确定我还能做什么
您是否也在使用 -shared 来创建库?如果档案工作正常,您不需要从档案中提取任何内容。
如果您在可执行文件上运行 ldd,它将显示应用程序需要哪些动态链接,您可以检查 -fPIC 等是否正常工作。还要确保 .so 库在您的 LD_LIBRARY_PATH 上(很抱歉,如果这很明显,检查无害)。
-
是的,我使用了-shared。并且应用程序正在链接到库。我开始认为图书馆本身有问题。