在Ubuntu下链接到X11

时间:2015-10-11 19:50:22

标签: ubuntu gcc x11

我从某个地方下载了一个针对X11的Hello,World C程序。它编译,但没有正确链接。

32位Ubuntu版本在Windows 7下的VM VirtualBox中运行。我使用的编译和链接命令(我尝试过的众多变体之一)是:

gcc -L/usr/lib/i386-linux-gnu -lX11 hellowin.c

显然,这是正确的位置,因为找到libX11'给了我:

/usr/lib/i386-linux-gnu/libX11.a

以及其他此类文件(主要是.so)。我得到的错误是这样的:

....undefined reference to 'XOpenDisplay'

我做错了什么?

编辑:如果我遗漏-L并按照建议将-l移动到文件之后,它现在可以工作了。例如:

gcc hellowin.o -lX11

或直接指定库,但这仅适用于.so,而不是.a:

gcc hellowin.o /usr/lib/i386-linux-gnu/libX11.so

(使用Hello,World源的构建指令使用-L和-l,它们都放在目标文件名之前。)

2 个答案:

答案 0 :(得分:1)

gcc的参数顺序和链接很重要(编译器选项,源文件,目标文件,库从高级到低级):

gcc -Wall -g  hellowin.c  -L/usr/lib/i386-linux-gnu -lX11 -o hellowin

然后尝试

./hellowin

您可能需要将调试器与

一起使用
gdb ./hellowin

答案 1 :(得分:0)

我从rosettacode编译了一个版本的“Hello world”,我没有收到任何错误。尝试使用另一个版本的Ubuntu(我的是VritualBox的旧版本:Ubuntu 12)。我使用的是Windows 10.(虽然我认为这无关紧要) 也许你忘了包含其中一个库。
如果有什么不起作用,请给我们一些未运行的代码。

http://rosettacode.org/wiki/Window_creation/X11#Xlib