1

それでは、何が起こっているのかについてのちょっとした裏話を。私は現在、いくつかのもの (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 にありましたが。

4

2 に答える 2

6

共有ライブラリにはインストール パスがあります。これは、適切な PREFIX を使用してビルドおよびインストールする必要があることを意味します。インストール ドキュメントを参照してください。または、静的な LuaJIT ライブラリとのリンクを検討してください。システム以外の場所から動的ライブラリをロードすることは、ワームの缶詰です。

segfault は、OSX/x64のLuaJIT 埋め込み手順に従っていないことが原因です。

于 2013-02-04T09:15:18.477 に答える
0

Macportsを使って生活を楽にしてみませんか:

  1. マックポートをインストールする
  2. $ xcode-select -switch /Applications/Xcode.app/Contents/Developer
  3. $ sudo port selfupdate
  4. $ sudo port install libsdl_image luajit

これにより、要求したポートと依存関係がインストールされます。

その後、有能なチームが他のすべてのことを担当していることを知って、プロジェクトに集中できます。

于 2013-02-04T09:23:15.527 に答える