错误:"未定义引用"在编译c ++时

时间:2015-05-17 23:03:09

标签: c++ linker-errors undefined-reference

我正在使用一个小小的c ++应用程序,我正在尝试使用xdotool(libxdo:https://github.com/jordansissel/xdotool)。

我使用" make"建立了xdotool。命令,并将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;
}

1 个答案:

答案 0 :(得分:1)

我猜这是因为xdo是一个C库 您正在链接和构建C ++应用程序。

因此,您的编译器认为xdo_new()是一个C ++名称损坏函数。但实际上它已经与libxdo相关联。作为C名称错位函数。

我会试试这个:

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

您基本上是在告诉编译器将xdo中的所有名称视为C函数声明。只要没有类,这应该有效(如果有类,那么我的假设开始时是不正确的。)