それでは、何が起こっているのかについてのちょっとした裏話を。私は現在、いくつかのもの (SDL、SDL_image などを含む) を構築し、それらを単一の実行可能ファイルにまとめてリンクし、手動で実行する作業を行っています。私は独自のカスタム makefile を作成しており、Xcode ではなくコマンド ラインのみを使用しています。(私は Xcode が嫌いです) これまでのところすべて成功していますが、Lua スクリプトをコードの上に置きたいので、luajit2.0 をコンパイルして、それをリンクしようとしています。
しかし、SDL は問題なく動作し、ロードされたイメージでウィンドウを開くことができましたが、luajit は正しくリンクすることを拒否しました。dyld: Library not loaded... メッセージが表示され、/usr/local/lib がそこに存在しないだけでなく、gcc にコマンド ラインで -L が指定され、ビルドを保持するフォルダーが指定されます。ルアジット。バイナリで otool -L を使用すると、そのディレクトリが表示されますが、ここでも存在しません。
この問題をグーグルで検索しようとしているときに、次のコマンドを提供するソリューションに出くわしました: install_name_tool -id `pwd`/install/lib/libluajit-5.1.dylib install/lib/libluajit-5.1.dylib
. (SO から)バイナリを再構築し、otool を使用した後、ライブラリの正しいディレクトリが表示されました。ただし、現在、dyld エラーは発生しませんが、luajit 関数を使用するとセグメンテーション違反が発生します。(具体的にはluaL_newstate)
バイナリをビルドするコマンドは次のとおりです。
gcc -g -Wall -arch x86_64 -framework Cocoa -Iinstall/include -Linstall/lib src/native/main.c -lluajit-5.1.2.0.0 -lSDL2_image -lSDL2 -lSDL2main -lpng -lz -o game
libluajit-5.1.2.0.0.dylib であり、対応するすべてのシンボリック リンクは install/lib にあります。lua インクルード ファイルは install/include にあります。ここで何がうまくいかないのですか?私は非常に混乱しており、これを機能させたいと思っています。私は、gcc や OS X と格闘するよりも、コードと格闘したいと思っています。
編集:リクエストごとに、現在の「セグメンテーション違反: 11」エラーの前に発生した以前のエラーは、基本的に次のとおりです。
dyld: Library not loaded: /usr/local/lib/luajit-5.1.2.dylib
Referenced from: <my application, forgot this exact bit>
Reason: image not found
そして、otool -L game を実行すると、次のようになりました。
MacBook-Air:old freezerburn$ otool -L game
game:
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 19.0.0)
/usr/local/lib/libluajit-5.1.2.dylib (compatibility version 2.0.0, current version 2.0.0)
/Users/freezerburn/Dropbox/Code/lua_engine/old/install/lib/libSDL2_image-1.2.0.dylib (compatibility version 9.0.0, current version 9.5.0)
/Users/freezerburn/Dropbox/Code/lua_engine/old/install/lib/libSDL2-2.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/Users/freezerburn/Dropbox/Code/lua_engine/old/install/lib/libpng15.15.dylib (compatibility version 30.0.0, current version 30.0.0)
/Users/freezerburn/Dropbox/Code/lua_engine/old/install/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.7)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
libluajit は ./install/lib にありましたが。