Как получить программу на C ++, которая использует XWindows для сборки на Bash на Ubuntu в Windows? - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь получить программу на C ++, которая использует XWindows для сборки на Bash на Ubuntu в Windows. Я понимаю, что Bash на Ubuntu в Windows официально не поддерживает графические приложения Linux, но я бы хотел, чтобы программа собиралась независимо от возможности. Я старался максимально уменьшить свою проблему, надеюсь, я предоставил достаточно информации.

Сначала я установил пакет libx11-dev и связанные с ним пакеты с помощью команды:

sudo apt-get install libx11-dev

Во-вторых, мой Makefile выглядит следующим образом:

CXX = g++
CXXFLAGS = -Wall -MMD -lX11
EXEC = exe
OBJECTS = main.o window.o
DEPENDS = ${OBJECTS:.o=.d}

${EXEC}: ${OBJECTS}
        ${CXX} ${CXXFLAGS} ${OBJECTS} -o ${EXEC}

-include ${DEPENDS}

.PHONY: clean

clean:
        rm ${EXEC} ${OBJECTS} ${DEPENDS}

В-третьих, файл window.h имеет следующий вид:

#ifndef __WINDOW_H__
#define __WINDOW_H__

#include <X11/Xlib.h>

class Xwindow {
    Display *d;

  public:
    Xwindow();
};

#endif

В-четвертых, файл window.cc выглядит следующим образом:

#include "window.h"

Xwindow::Xwindow() {
    d = XOpenDisplay(NULL);
}

Наконец, файл main.cc выглядит следующим образом:

#include "window.h"

int main() {
    Xwindow xw();

    return 0;
}

Когда я запускаю свой Makefile, я получаю следующий вывод:

g++ -Wall -MMD -lX11   -c -o main.o main.cc
g++ -Wall -MMD -lX11   -c -o window.o window.cc
g++ -Wall -MMD -lX11 main.o window.o -o exe
window.o: In function `Xwindow::Xwindow()':
window.cc:(.text+0x12): undefined reference to `XOpenDisplay'
collect2: error: ld returned 1 exit status
Makefile:8: recipe for target 'exe' failed
make: *** [exe] Error 1

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 02 мая 2018

В некоторых средах, включая Ubuntu, вам необходимо передавать -l аргументы после объектных файлов, которые используют эти библиотеки.

Кроме того, -l не принадлежит CXXFLAGS, они должны быть в LIBS, что следует за ${OBJECTS}.

...