& quot; Неопределенная ссылка & quot; ошибка при передаче переменной по ссылке

Я довольно новичок в C ++, но эта штука сбивает меня с толку любой логикой. Мой код выглядит следующим образом:

#include "stdlib.h"#include "syslog.h"#include "unistd.h"#include "sys/stat.h"#include "X11/Xlib.h"#include "cstdio"
void process();
void startTracker();

Display *display;
Window rootWindow;
XEvent xevent;

У меня есть заголовок Xlib, и если я нажимаю на функции-члены в Eclipse, он переходит к определениям.

int main(int argc, char *argv[])
{
// set logging up
openlog("unison", LOG_CONS|LOG_PID|LOG_NDELAY, LOG_LOCAL1);

syslog(LOG_NOTICE, "Starting Unison Handler");

pid_t pid, sid;

pid = fork();

// fork failed
if (pid < 0) {
exit(EXIT_FAILURE);
}

if (pid > 0) {
exit(EXIT_SUCCESS);
}

umask(0);

sid = setsid();
if (sid < 0) {
exit(EXIT_FAILURE);
}

if (chdir("/") < 0) {
exit(EXIT_FAILURE);
}

close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);

startTracker();

while (true) {
process();
}

closelog();
return(EXIT_SUCCESS);
}

Затем я назначаю переменные для выбора входа

void startTracker() {
display = XOpenDisplay(0);
rootWindow = XRootWindow(display, 0);
XSelectInput(display, rootWindow, PointerMotionMask);

}

void process()
{

…но когда я добавлю &событие здесь …

    XNextEvent(display, &xevent);
switch (xevent.type) {
case MotionNotify:
syslog(
LOG_NOTICE,
"Mouse position is %dx%d",
xevent.xmotion.x_root, xevent.xmotion.y_root
);
}
}

…все это рушится.

По какой-то причине передача xevent в качестве ссылки отбрасывает весь заголовок Xlib и дает мне следующее:

00:16:15 **** Инкрементная сборка конфигурации Отладка для проекта unisond ****
сделать все
Строительный файл: ../unisond.cpp
Вызов: компилятор GCC C ++
g ++ -O0 -g3 -Wall -c -fmessage-length = 0 -MMD -MP -MF "unisond.d" -MT "unisond.d" -o "unisond.o" "../unisond.cpp"Полное строительство : ../unisond.cpp

Построение цели: унисонд
Вызов: GCC C ++ Linker
g ++ -o "unisond" ./unisond.o
./unisond.o: В функции `startTracker () ':
/home/ancarius/workspace/unisond/Debug/../unisond.cpp:97: неопределенная ссылка на `XOpenDisplay '
/home/ancarius/workspace/unisond/Debug/../unisond.cpp:98: неопределенная ссылка на `XRootWindow '
/home/ancarius/workspace/unisond/Debug/../unisond.cpp:99: неопределенная ссылка на `XSelectInput '
./unisond.o: В функции `process () ':
/home/ancarius/workspace/unisond/Debug/../unisond.cpp:105: неопределенная ссылка на `XNextEvent '
collect2: error: ld вернул 1 состояние выхода
make: *** [unisond] Ошибка 1

00:16:15 Сборка завершена (заняло 159 мс)

Может ли кто-нибудь объяснить, что я сделал неправильно? Я перепробовал все, что мог придумать, но не повезло.

2

Решение

Похоже, вам не хватает библиотеки X11 для компоновки.

добавлять -lX11 к вызову g ++.

это обеспечивает необходимые шаги.

Щелкните правой кнопкой мыши Папка проекта> Свойства> Сборка C / C ++> Настройки> GCC C ++ Linker> Библиотеки> добавьте «X11»

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector