web-dev-qa-db-ja.com

リンクエラー:コマンドラインにDSOがありません

私はWindowsから来たLinux(Ubuntu 14.04 LTS 64bitを使用)にはかなり慣れておらず、既存の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がコマンドラインにありません )。

問題が何であるかのアイデアはありますか?

コンパイル中の完全な出力は次のとおりです。 https://Gist.github.com/wbolden/857eddd11e4dcb915c02

そして、ここにMakefileでの私の試みがあります: https://Gist.github.com/wbolden/135033daae04ed0d8cf

13
Will Bolden

これが、Linuxの初心者であり、Linuxに関連するものが特に明らかであると思わない人の助けになることを願っています。

Talonmiesで述べたように、間接的にリンクすることはできません。そのため、使用しているライブラリに必要な追加のライブラリを指定する必要があります。つまり、ライブラリBとCを必要とするライブラリAをリンクする場合、プログラムが正しくリンクするには、3つのライブラリすべてをリンクする必要があります。

他に必要なライブラリを見つけるために、pkg-configコマンドを使用しました。そのために、ガイド here を見つけました。 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)。

私のプログラムは正常にリンクされました。これは、同様の問題を抱えている人に役立つことを願っています。

22
Will Bolden

リンカーには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
7
Rahul R Dhobi

次のコマンドを使用して問題を修正します。

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