簡體   English   中英

鏈接錯誤:命令行中缺少 DSO

[英]Linking error: DSO missing from command line

我對來自 Windows 的 Linux(使用 Ubuntu 14.04 LTS 64 位)相當陌生,並且正在嘗試移植我現有的 CUDA 項目。

通過鏈接時

/usr/local/cuda/bin/nvcc -arch=compute_30 -code=sm_30,compute_30 -o Main.o Display.o FileUtil.o Timer.o NeuralNetwork.o -L/usr/lib -L/usr/local/lib -L/usr/lib/x86_64-linux-gnu -L/usr/local/cuda/lib64 -lGLEW -lglfw3 -lGL -lGLU -lcuda -lcudart

我遇到以下錯誤:

/usr/bin/ld: /usr/local/lib/libglfw3.a(x11_clipboard.c.o): undefined reference to  symbol 'XConvertSelection'
//usr/lib/x86_64-linux-gnu/libX11.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make: *** [CUDANN] Error 1

答案似乎與這篇文章中的解決方案密切相關( 奇怪的鏈接錯誤:命令行中缺少 DSO ),盡管鑒於我對 Linux 的經驗不足,我無法使它們適應我自己的問題。

關於問題可能是什么的任何想法?

這是編譯期間的完整輸出: https : //gist.github.com/wbolden/857eddd11e4dcb915c02

這是我對 Makefile 的嘗試: https : //gist.github.com/wbolden/135033daae04ed0d8cf3

希望這對像我這樣對 Linux 不熟悉並且沒有發現任何與 Linux 相關的東西特別明顯的人有所幫助。

正如 talonmies 所指出的,我無法間接鏈接,因此需要指定我正在使用的庫所需的任何其他庫。 也就是說,如果我鏈接庫A,需要庫B和C,我需要鏈接所有三個庫,程序才能正確鏈接。

為了找到需要的其他庫,我使用了pkg-config命令,我在這里找到了一個指南。 運行pkg-config --print-requires --print-requires-private glfw3給出以下輸出,這是 glfw3 所需的軟件包列表。

x11
xrandr
xi
xxf86vm
gl

然后我能夠通過運行pkg-config --libs找到我需要包含的庫,然后是庫的名稱。 例如, pkg-config --libs x11產生-lX11

注意:您可以將多個項目作為輸入傳遞給pkg-config ,因此運行

pkg-config --libs $(pkg-config --print-requires --print-requires-private glfw3)

將打印出您需要鏈接的所有其他庫( -lX11 -lXrandr -lXi -lXxf86vm -lGL )。

我的程序現在鏈接成功,我希望這對遇到類似問題的人有所幫助。

您的鏈接器需要 X11 庫,您需要為鏈接器指定 -lX11

嘗試

/usr/local/cuda/bin/nvcc -arch=compute_30 -code=sm_30,compute_30 -o Main.o Display.o FileUtil.o Timer.o NeuralNetwork.o -L/usr/lib -L/usr/local/lib -L/usr/lib/x86_64-linux-gnu -L/usr/local/cuda/lib64 -lGLEW -lglfw3 -lGL -lGLU -lcuda -lcudart -lX11

嘗試在 Makefile 中庫列表(命令行)的末尾添加 -pthread。

它對我有用。

使用以下命令修復問題:

FLAGS=-lX11 ./configure --prefix=/usr --disable-static
make
make install

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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