2017-05-22 21 views
0

私はXQuarts.appを正しくインストールしましたが、リンクフェーズに問題があります。
ここにシンプルなコードがあります。
Mac OSでx11を実行

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

int main() { 
    Display* dis = XOpenDisplay(NULL); 
    return 0; 
} 

しかし、それは出力私はこの

g++ -c main.cpp -I/opt/X11/include

ようXQuartz.appからそれをコンパイルします。私はGoogleで検索

Yosemite 10.10.2

Undefined symbols for architecture x86_64: "_XOpenDisplay", referenced from: _main 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) make: *** [default] Error 1

を私のMac版ロットではありませんでしたが、有用な助けを求めてください。前もって感謝します。

+0

'/ include'はコンパイルのためのもので、リンクしません。ライブラリではなく、.hファイルがあります。 – MSalters

答えて

0

あなたはlibX11とリンクしていません。

-L/opt/X11/lib -lX11 

ない重要な、しかし、注目に値する:リンカコマンドに次のフラグを追加します。あなたは、X11アプリケーションを構築したり実行するためのxterm(XQuartzでターミナル)を使用する必要はありません。

+0

それは動作します。あなたは「なぜ」これについてもっと詳しく説明できますか?それは非常に役に立つでしょう。 –

+0

'XOpenDisplay'関数はlibX11の一部です。そのライブラリとリンクしていない場合、リンカーはその関数をどこからでも取得することはできません。 – duskwuff

+0

なぜ、このコード行 '#include 'は自動的にこのライブラリをコンパイラにリンクさせるのですか? –

関連する問題