9

Macで実行しようとしているunixコマンドラインアプリ(大きな厄介なmakefileを使用)があります。もちろん、適切なライブラリをすべて使用して、10.6システムでコンパイルしています。展開環境は10.5システムであり、追加のライブラリはありません。

-dynamicを使用せずにコンパイルしましたが、静的ライブラリが正しく含まれているようです。10.6システムで実行すると、動作します。ただし、10.5システムで実行すると、次のようになります。

dyld:不明な必要なロードコマンド0x80000022

10.5 xcodeを使用して10.6システム用にコンパイルしたときにも同じエラーが発生したため、バージョンの不一致タイプの問題のように見えます。ただし、gcc-4.0を使用し、

$ CFLAGS = -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min = 10.5

したがって、10.5に設定する必要があります...何かアイデアはありますか?

ありがとう

古代の質問の編集:

別のコンピューターでもまったく同じ問題が発生します。今回は10.5.8で、完全に更新されていますが、同じ実行可能ファイルは10.6でも機能します。

私がこれを尋ねてから数ヶ月の間に誰かがこれに運がありましたか?

4

6 に答える 6

3

dyld 0×80000022エラーの原因は、でリンクしようとしていて、理解できないロード コマンド ( ) を使用することが考えられます。OS X 10.6OS X 10.6LC_DYLD_INFO_ONLY = 0×80000022OS X 10.5

これを修正するには、リンク コマンドの直前に環境変数を設定して、展開ターゲットを使用していることを確認します。

export MACOSX_DEPLOYMENT_TARGET=10.5

(または setenv MACOSX_DEPLOYMENT_TARGET=10.5)

実行可能ファイルが次のような正しいロード コマンドを使用しているかどうかをいつでも確認できます。

otool -l executable 

LC_DYLD_INFO_ONLYコマンド (展開ターゲットなし) または(展開ターゲットあり)のいずれかが表示されますLC_DYLD_INFO

于 2011-10-20T12:34:50.420 に答える
2

私は10.6で開発しているので、同じ問題を探していましたが、10.5で動作するバージョンが必要です。上記のコンパイラ フラグに加えて、以下を追加する必要があります。

-no_compact_linkedit

ここで説明します:

http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man1/ld.1.html

それが言うところ:

通常、Mac OS X 10.6 を対象とする場合、リンカーは __LINKEDIT セグメントにコンパクトな情報を生成します。このオプションを指定すると、リンカは代わりに従来の再配置情報を生成します。

「unknown required load command 0x80000022」に関する xcode-users メーリング リストでのディスカッションからここにたどり着きました。

于 2010-06-15T22:15:13.707 に答える
1

リンカー-mmacosx-version-min=10.5に渡すことでこれを解決できました。たとえば、共有を構築していた ffmpeg に渡されました。詳細: http://lists.apple.com/archives/xcode-users/2009/Oct/msg00530.html--extra-ldflags="-mmacosx-version-min=10.5"configure

于 2011-08-01T02:55:43.583 に答える
0

OK、2番目の解決策で、あまり満足のいくものではありませんが、10.5.8コンピューターを見つけて、開発者パッケージをインストールして再コンパイルすることです... powerPCの場合も同じです...悲しいですが、うまくいきます...

于 2010-06-10T20:30:08.260 に答える
0

使用するライブラリの数によっては、すべてを静的にリンクすることが難しい場合があります。「otool -L your_binary」は何を教えてくれますか?

私自身のアプリケーション用の自己完結型パッケージを取得するために、カスタムの MacPorts インストールを非標準のディレクトリに作成しました。これにより、そのディレクトリからライブラリに dynlink でき、人々にインストールするように求めることだけに制限されました。すべてをコンピュータの同じ場所に配置します。Mac の精神とはまったく異なりますが、これは Unix アプリであり、とにかく使用するには Unix に精通している必要があります。

幸運を

パスカル

于 2009-09-17T20:47:44.620 に答える
0

10.5.6 で追加された動的ライブラリ ロード機能 (0x22) があることがわかりました。私が実行していたシステムは 10.5.5 でした。10.5.8 にアップグレードしたところ、すべて動作しました。

于 2009-09-17T21:15:21.120 に答える