我有C代码main_code.c
和helper_code.c
。前者取决于某些CUDA代码cuda_code.cu
,而后者则取决于外部库mylib
。为了使我的外部库mylib
正常工作,我需要使用-static
标志将其链接到我的代码:
g++ main_code.c helper_code.c -o main_code -static -L/usr/local/mylib/lib -lmylib -lmylib2
但是main_code.c
也取决于CUDA代码-cuda_code.cu
。我可以将其链接到:
nvcc cuda_code.cu -c
g++ main_code.c -o main_code cuda_code.o -L/usr/local/cuda-10.0/lib64 -lcudart -lpthread
我想将我的代码与CUDA代码和外部库mylib
一起编译。但是,链接mylib
仅与-static
标志一起使用。天真尝试如下,但它不起作用:
nvcc cuda_code.cu -c
g++ main_code.c helper_code.c -o main_code cuda_code.o -static -L/usr/local/mylib/lib -lmylib -lmylib2 -L/usr/local/cuda-10.0/lib64 -lcudart -lpthread
这给出了错误:
/usr/bin/ld: cannot find -lcudart
我想是因为在与CUDA链接时不能使用静态标志(因为当我删除-static
标志时(除了也删除了mylib
库链接时,它会消失)。
然后我尝试分别编译helper_code.c
,然后将其链接到main_code.c
,因为仅是helper_code.c
需要mylib
:
helper.o:
g++ helper_code.c -c -static -L/usr/local/mylib/lib -lmylib -lmylib2
cuda-code.o:
nvcc cuda_code.cu -c
main-code: helper.o cuda-code.o
g++ main_code.c -o main_code helper_code.o cuda_code.o -L/usr/local/cuda-10.0/lib64 -lcudart -lpthread
但是这也不起作用。我收到一个undefined reference
错误,它引用mylib
中定义的函数,这意味着链接到mylib
无效。我可以通过包含mylib
库并使用-static
标志来解决该错误,但这会中断CUDA链接。
我可以分别使CUDA链接(到cuda_code.cu
)正常工作,或者mylib
链接到工作正常,但不能同时使两者同时工作。
因此,有一种解决方法可以链接mylib
(需要-static
),同时还要链接我的CUDA代码(不允许-static
)?
我有C代码main_code.c和helper_code.c。前者取决于某些CUDA代码cuda_code.cu,后者取决于外部库mylib。为了使我的外部库mylib正常工作,我需要将其链接到...
跟随在talonmies的评论中链接的答案,以下是the俩: