2015-05-17 2 views
0

Я работаю в небольшом приложении C++, я пытаюсь использовать xdotool (libxdo: https://github.com/jordansissel/xdotool).ошибка: «неопределенная ссылка на» при компиляции C++

Я построил xdotool с помощью команды «make» и поместил libxdo.so и libxdo.so.3 в/usr/lib. и xdo.h в/usr/local/include.

им пытаются составить мое приложение с помощью:

g++ -I /usr/local/include/ -L /usr/lib/ LinuxTest.cpp -lXtst -lX11 -lxdo 

но им получать эту ошибку:

undefined reference to `xdo_new(char const*)' 
undefined reference to `xdo_move_mouse_relative(xdo const*, int, int)' 

это мой исходный код:

#include <iostream> 
#include <X11/Xlib.h> 
#include <X11/keysym.h> 
#include <X11/X.h> 
#include <unistd.h> 
#include <X11/extensions/XTest.h> 
#include <xdo.h> 

using namespace std; 

#define KEYCODE XK_Tab 
int mapa[2048]; 
void hook(); 

xdo_t* xdoMain; 

int main() { 
    for (int i=0;i<2048;i++){ 
     mapa[i]=0; 
    } 
    xdoMain = xdo_new(NULL); 
    xdo_move_mouse_relative(xdoMain,200,200); 
    hook(); //do some things using X11 
    return 0; 
} 
+0

Запустили ли вы 'ldconfig' после того, как вы поместили lib в'/usr/lib'? –

ответ

1

Я предполагаю, что это потому что xdo является библиотекой C.
Вы связываете и строите приложение C++.

Таким образом, ваш компилятор считает, что xdo_new() - это функция с именем C++. Но на самом деле это связано с libxdo. как измененная функция C.

Я хотел бы попробовать это:

extern "C" { 
#include <xdo.h> 
} 

Вы в основном говорите компилятор рассматривать все имена в XDO в объявлении функции C. Пока нет классов, это должно работать (если есть классы, то мое предположение неверно для начала).

+0

Большое спасибо, я не знал, что XDO является библиотекой C, кроме того, что я не часто программист на C++ – moscoquera

+0

@moscoquera: Если в библиотеке есть новые/бесплатные функции, то это, вероятно, библиотека C, поскольку C++ использует метод RAII, который делает это избыточным. –