当前位置: 首页 > 面试题库 >

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

陈成济
2023-03-14
问题内容

我对使用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所述,我无法间接链接,因此需要指定我正在使用的库所需的任何其他库。也就是说,如果我链接需要库B和C的库A,则需要链接所有三个库以使程序正确链接。

为了找到需要的其他库,我使用了pkg-config命令,在这里找到了指南。运行pkg-config --print-requires --print-requires- private glfw3给出以下输出,这是glfw3所需的软件包的列表。

x11
xrandr
xi
xxf86vm
gl

然后,我可以通过运行pkg-config --libs,之后加上库的名称来找到需要包含的库。例如,pkg-config --libs x11yield -lX11

注意:您可以将多个项目传递pkg-config为输入,因此运行

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

将打印出您需要链接(-lX11 -lXrandr -lXi -lXxf86vm -lGL)的所有其他库。

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



 类似资料:
  • 问题内容: 最近,我不得不在PC上重新安装Linux Mint。我重新安装了所有库,例如GLFW,并遇到了从未见过的错误。不幸的是,由于无法找到对我有用的修复程序,我的google- fu技能似乎无法弥补这个错误。旁注:这些程序在我的旧安装中可以很好地编译,并且在运行Linux Mint 17.2的笔记本电脑上也可以完美地编译。 这是我用来编译的编译语句: 这是终端向我吐出的东西: 所以,如果有人

  • 问题内容: 我正在尝试像这样编译C ++程序: 但是我收到以下错误: 我不知道这个错误是什么意思。任何帮助将不胜感激。 问题答案: DSO在这里表示动态共享对象;由于错误消息指出命令行中缺少该消息,因此我想您必须将其添加到命令行中。 也就是说,尝试添加到命令行。

  • 下面是完整的输出:-

  • 当我尝试注册以下代码时,会出现此错误:code 下图中出错

  • 我在SpringWebFlux练习Reactor,我发现学习曲线非常陡峭。我想做的就是: 来自控制器的数据我查询站点设置,返回一个Mono。我对用户存储库进行了一次查询(以便稍后查明用户是否已经注册),该查询返回一个Mono。 现在我想做一些事情,比如: 编辑:问题是我在@PostConstruct中持久化设置,而我没有调用subscribe。