Проблемы с линкером в Ubuntu 11.10 - PullRequest
8 голосов
/ 24 января 2012

после обновления до Ubuntu 11.10 я обнаружил, что многие из моих старых и текущих разработок больше не могут быть скомпилированы. Я свел проблему к простому примеру:

#include <X11/Xlib.h>

int main() {
    Display* display = XOpenDisplay(":0.0");
    XCloseDisplay(display);

    return 0;
}

Компиляция с использованием:

g++ -lX11 test.cpp

или

g++ -c -o test.o test.cpp
g++ -lX11 -o test test.o

Вызывает сбой:

/tmp/ccBAOpzy.o: In function `main':
test.cpp:(.text+0x11): undefined reference to `XOpenDisplay'
test.cpp:(.text+0x21): undefined reference to `XCloseDisplay'

Есть идеи? Я обнаружил, что некоторые вещи с компоновщиком изменились в 11.10:

https://wiki.ubuntu.com/NattyNarwhal/ToolchainTransition

Но все еще не объясняет эти проблемы.

1 Ответ

20 голосов
/ 25 января 2012

g++ -lX11 -o test test.o

Команда выше неверна . Попробуйте вместо этого:

g++ test.o -lX11

Объяснение, почему заказ имеет значение здесь .

Кроме того, вы никогда не должны вызывать свои исполняемые файлы test в UNIX.

...