ubuntu - Ubuntu下连接X11

标签 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,它们都放在目标文件名之前。)

最佳答案

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

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

然后尝试
./hellowin

您可能需要将调试器与
gdb ./hellowin

关于ubuntu - Ubuntu下连接X11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33069423/

相关文章:

qt - x11 限制鼠标移动

linux - WSL2 Ubuntu 20.04 没有 Docker 容器的输出

我可以让 gcc 在链接共享库时忽略静态库吗?

android - IDEA和DDMS同时运行无法连接模拟器

ubuntu - 无法在 ubuntu 18.04 中安装 web3

从 gcc 到 Visual Studio Express 2010 的 C 代码

c++ - Raspberry Pi ARM Float ABI 兼容性

c++ - 检测系统托盘\任务栏方向(X11)

c - 为什么 XDrawString 不采用 "const char *"?

configuration - 用于X11转发的SSH压缩