[英]Compiling CUDA code while linking a static library
我有 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
)?
按照 talonmies 評論中鏈接的答案,以下內容成功了:
g++ main_code.c -o main_code helper_code.o cuda_code.o -L/usr/local/mylib/lib -L/usr/local/cuda-10.0/lib64 -Wl,-Bstatic -lmylib -lmylib2 -Wl,-Bdynamic -lcudart
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.