Linux 链接错误:命令行中缺少DSO

Linux 链接错误:命令行中缺少DSO,linux,linker,x11,glfw,nvcc,Linux,Linker,X11,Glfw,Nvcc,我是Linux新手(使用Ubuntu14.04 LTS 64位),来自Windows,我正在尝试移植我现有的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/lo

我是Linux新手(使用Ubuntu14.04 LTS 64位),来自Windows,我正在尝试移植我现有的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
答案似乎与本文()中的解决方案密切相关,尽管由于我对Linux缺乏经验,我无法使它们适应我自己的问题

你知道问题出在哪里吗

以下是编译期间的完整输出:

下面是我对Makefile的尝试:

您的链接器需要X11库,您需要为链接器指定-lX11

试一试


希望这将对那些像我这样的人有所帮助,他们是Linux新手,没有发现任何与Linux相关的东西特别明显

正如Talonmes所指出的,我无法间接链接,因此需要指定我正在使用的库所需的任何其他库。也就是说,如果我链接库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-lxf86vm-lGL


我的程序现在链接成功,我希望这对任何有类似问题的人都有帮助。

使用以下命令修复此问题:

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

尝试在Makefile中的库列表(命令行)末尾添加-pthread


这对我有用

链接器会准确地告诉您问题所在,而您链接到的答案会准确地告诉您如何解决问题。显然,您运行的平台不允许间接链接。为所需的其他库添加库依赖项(链接器错误消息右侧显示提示libX11)。我正在从这个问题中删除CUDA标记,它与CUDA或CUDA编程无关。正如我所说的,我对Linux相当陌生(我只使用它几天),因此对于一个拥有中等经验的人来说,可能清楚的事情对我来说并不那么清楚。使用ldd,我得到了以下信息,尽管我不知道如何使用它。我尝试添加-L/usr/x86_64-linux-gnu和-L/lib64,但这并没有改变错误。可能您必须离开gist或使用其他系统,因为现在gist不可用。我的用户名已更改,请用wboldenAlso替换WilliamHBolden。我在当天早些时候尝试过这样做,但不幸的是没有解决我的问题。下面是我得到的新错误@will bolden:这个答案确实解决了你的问题。添加x11库消除了dso错误。现在您有了不满意的依赖项。添加这些。您是否愿意添加更多的推理,错误是什么,以及如何修复?非常有用。有趣的是,你在5年后帮助了一个人。回答得真好!
FLAGS=-lX11 ./configure --prefix=/usr --disable-static
make
make install