0

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 は、自分のプロジェクトでライブラリとしてリンクするフレームワークではなかったという印象を受けました。正しいヘッダーを提供する限り、問題はありません...これは間違っていますか?

4

3 に答える 3

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) 
于 2012-07-03T23:33:49.670 に答える
0

これは間違っていますか?

はい。X11 は、コンパイラを満足させるためのヘッダーと、実際にプロトコルを実装するためのライブラリの両方で構成されています。

于 2012-07-02T23:05:26.780 に答える
0

コンパイル済みの X11 ライブラリとリンクする必要があります。リンカは、参照されているシンボルのオブジェクト コードが見つからないことについて不平を言っています。これはコンパイラ エラーではないため、正しいヘッダーをインクルードするだけでは、実行可能ファイルを完全にビルドするには不十分です。

于 2012-07-02T23:07:24.733 に答える