在升级到Ubuntu 11.10之后,我发现我的许多旧的和当前的开发都不能再编译了.我把问题简化为一个简单的例子:
#include <X11/Xlib.h>
int main() {
Display* display = XOpenDisplay(":0.0");
XCloseDisplay(display);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用以下方法编译它:
g++ -lX11 test.cpp
Run Code Online (Sandbox Code Playgroud)
要么
g++ -c -o test.o test.cpp
g++ -lX11 -o test test.o
Run Code Online (Sandbox Code Playgroud)
导致失败发生:
/tmp/ccBAOpzy.o: In function `main':
test.cpp:(.text+0x11): undefined reference to `XOpenDisplay'
test.cpp:(.text+0x21): undefined reference to `XCloseDisplay'
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我发现一些链接器的东西在11.10中发生了变化:
https://wiki.ubuntu.com/NattyNarwhal/ToolchainTransition
但仍然没有解释这些问题.
Emp*_*ian 20
g++ -lX11 -o test test.o
以上命令不正确.试试这个:
g++ test.o -lX11
Run Code Online (Sandbox Code Playgroud)
解释为什么订单在这里很重要.
此外,您永远不应该test
在UNIX上调用可执行文件.