簡體   English   中英

在鏈接靜態庫的同時編譯 CUDA 代碼

[英]Compiling CUDA code while linking a static library

我有 C 代碼main_code.chelper_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM