[问题] 用makefile编译包含CUDA的动态连结(.so)

楼主: hardman1110 (笨小孩)   2018-02-01 21:46:14
开发平台(Platform): (Ex: Win10, Linux, ...)
Unbuntu 16
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
g++ 5.4
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
CUDA: 8 openCV:3.2
问题(Question):
想将自己的函式编译成动态连结给别人使用
在win10 已成功产生其.dll并使用 by vs2017
但在ubuntu上make时却出现错误结果
此时如果在.cpp 加个main 输出程执行档就不会有问题
恳请各位大大指点一下小弟makefile在输出.so时做错了哪步
喂入的资料(Input):
.cpp .cu .h档
预期的正确结果(Expected Output):
成功产生 pdda.so
错误结果(Wrong Output):
/usr/bin/ld: ./pdda_cuda.o: relocation R_X86_64_32 against `.bss' can not be
used when making a shared object; recompile with -fPIC
./pdda_cuda.o: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
程式码(Code):(请善用置底文网页, 记得排版)
https://gist.github.com/ChiFang/70b6ee3ac2d3266373706ac16ff90345
pdda.so: pdda_cuda.o
g++ -fPIC -shared -o pdda.so ./src/pdda.cpp ./pdda_cuda.o -I ./src/
-I/usr/local/cuda/include -L/usr/local/cuda/lib64 -lcuda -lcudart `pkg-config
作者: Bencrie   2018-02-01 22:14:00
pdda_cuda.o 也补个 -fPIC
楼主: hardman1110 (笨小孩)   2018-02-01 22:27:00
请问大大是要加在哪部份?nvcc 不支援-fPIC如果是加在 .pdda_cuda.o前则是出现一样错误
作者: LPH66 (-6.2598534e+18f)   2018-02-01 23:11:00
稍微咕狗了一下看到这个https://devtalk.nvidia.com/default/topic/395049/
楼主: hardman1110 (笨小孩)   2018-02-01 23:17:00
L大~ 所以我得用nvcc 把.cu编成.so再用g++将其跟.cpp编成最后的pdda.so?
作者: LPH66 (-6.2598534e+18f)   2018-02-01 23:52:00
我不确定喔, 你可能要参照其他资料例如 nvcc 的说明等
楼主: hardman1110 (笨小孩)   2018-02-02 10:56:00
谢谢L大 在nvcc加入-Xcompiler '-fPIC' -dc即可~~~

Links booklink

Contact Us: admin [ a t ] ucptt.com