将问题与C中的x11相关联

时间:2012-07-02 23:01:35

标签: c linker xcode4.3 x11

我正在尝试使用X11构建getPixelColor函数:

#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>

void getPixelColor (Display *d, int x, int y, XColor *color)
{
    XImage *image;
    image = XGetImage (d, RootWindow (d, DefaultScreen (d)), x, y, 1, 1, AllPlanes,          
    XYPixmap);
    color->pixel = XGetPixel (image, 0, 0);
    XFree (image);
    XQueryColor (d, DefaultColormap(d, DefaultScreen (d)), color);
}

int main(int argc, const char * argv[])
{
   return 0;
}

但是我收到以下错误,似乎是在链接期间:

Undefined symbols for architecture x86_64:
  "_XGetImage", referenced from:
  _getPixelColor in main.o
  "_XFree", referenced from:
  _getPixelColor in main.o
  "_XQueryColor", referenced from:
  _getPixelColor in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

知道问题是什么吗?我的印象是X11不是我在项目中作为库链接的框架 - 只要我提供正确的标题,那么我应该没问题......这是不正确的?

3 个答案:

答案 0 :(得分:1)

是的,您需要与xlib链接。这对我有用:

09:25 tmp $ gcc test.cpp /usr/X11/lib/libX11.dylib 
09:26 tmp $ ./a.out 
09:26 tmp $

或使用L开关和库路径:

09:26 tmp $ gcc test.cpp -L/usr/X11/lib -lX11
09:30 tmp $ otool -L a.out 
a.out:
    /usr/X11/lib/libX11.6.dylib (compatibility version 10.0.0, current version 10.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0) 

答案 1 :(得分:0)

  

这是不正确的?

是。 X11包含两个标头以保持编译器的快乐,以及库实际实现协议。

答案 2 :(得分:0)

您肯定需要链接已编译的X11库。链接器抱怨没有找到被引用符号的目标代码。这不是编译器错误,因此仅包含正确的标头不足以完全构建可执行文件。