moscoquera
moscoquera

Reputation: 288

error: "undefined reference to" while compiling c++

i'm working in a little c++ application, i'm trying to use xdotool (libxdo: https://github.com/jordansissel/xdotool ).

i builded xdotool using the "make" command, and put the libxdo.so and libxdo.so.3 into /usr/lib. and xdo.h into /usr/local/include.

im trying to compile my application using:

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

but im getting this error:

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

this is my source code:

#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;
}

Upvotes: 1

Views: 1433

Answers (1)

Loki Astari
Loki Astari

Reputation: 264361

I am guessing this is because xdo is a C library.
You are linking and building a C++ application.

Thus your compiler is thinking that xdo_new() is a C++ name mangled function. But in reality it has been linked into libxdo. as a C name mangled function.

I would try this:

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

You are basically telling the compiler to treat all the names in xdo as C function declarations. As long as there are no classes this should work (if there are classes then my assumption is incorrect to start with).

Upvotes: 2

Related Questions