2016-08-04 9 views
0

私は最近、MacにOpenGLプログラムを作成し、コンソールアプリケーションとして展開して他のMacユーザーに配布しようとしています。G ++:動的(dylib)ライブラリのリンク

プログラムはC++で書かれているので、g ++を使うことにしました。私のプログラムでは、OpenGLフレームワーク、GLFW、およびGLEWの使用が必要です。/usr/local/libフォルダにGLFWライブラリとGLEWライブラリがあり、/ usr/local/includeフォルダにヘッダファイルがあります。私のメインファイルはmain.cppです。 GLFW動的ロードライブラリはlibglfw.3.2.dylibと呼ばれ、GLEW動的ロードライブラリはlibGLEW.2.0.0.dylibと呼ばれます。

私はmain.cppにファイルのディレクトリから次のコマンドを使用して++グラムでコンパイル:

g++ -arch x86_64 -framework OpenGL -I/usr/local/include -L/usr/local/lib -o Main main.cpp -lglfw.3.2 -lGLEW.2.0.0 

すべてが正しくコンパイルし、プログラムが実行されます。

ただし、絶対パス:/ usr/local/libを使用してライブラリをリンクします。つまり、実行可能ファイルを別のコンピュータに移動すると、そのファイルは実行されません。すべてのコンピュータにロードするには、dylibが必要です。

g++ -arch x86_64 -framework OpenGL -I/usr/local/include -L'$(CURDIR)' -o Main main.cpp -lglfw.3.2 -lGLEW.2.0.0 

何らかの理由で、「$を認識していないようですので、これは動作しません。だから私は、私のmain.cppにファイルを持っているフォルダに移動し、私の現在のディレクトリにリンクする$(CURDIR)を使用してみました(CURDIR) 'をカレントディレクトリとして使用するか、または使用する有効な変数ではない可能性があります。

実行ファイルを任意のコンピュータに移動して動作させるために、私のdylibをリンクする方法を探しています。

ご協力いただければ幸いです。

+0

どのように動作しませんか? –

+0

単に現在のディレクトリのパスとしてパスを認識しません。 –

+0

本当にわかりませんが、-L '$(CURDIR)'から引用符を削除してみてください。私のMSYSシェル(Windows上)で、引用符を残すと、(少なくともエコーで)変数を展開していないようです。かっこも削除してみてください。 –

答えて

0

-Lで与えられるパスは、リンカーがextraライブラリを見つけるためのものです。実行時にこれらのライブラリが配置されている場所は、-Lで制御されていません。代わりにrpathと呼ばれるものを見てください。 MacOS Xで正しく行う方法に関する記事があります:https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/RunpathDependentLibraries.html

+0

g ++ -arch x86_64 -framework OpenGL -I/usr/local/include -Wl、-rpath、 '$ ORIGIN' -oメインmain.cpp libglfw.3.2.dylib libGLEW.2.0.0.dylib。それは適切にコンパイルされましたが、私は別のMacにフォルダを移動するとすぐに、私は以前と同じ問題を抱えています。 –

+0

@OrrenRavid:私が答えてくれたリンクをお読みください。 rpathsはMacOS(AppleはNIHと強く苦しんでいる)で動作し、 '$ ORIGIN'変数を使用せず、' @rpath'マクロを展開します。 – datenwolf

+0

コンパイラでの使用方法についての説明はなく、相対パスを使用する@rpathマクロが存在すると説明していますが、使用方法は決して説明しません。 –

関連する問題