問題タブ [otool]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
1164 参照

python - libSystem.B.dylib への共有オブジェクトの動的リンク

そこで、MySQL とMySQLclient-pythonの静的バージョンのコンパイルに取り組んできました。MySQLclient-python が持つ libSystem.B.dylib 依存関係を理解し​​ようとしているこの時点まで、私は完全に成功しています。

明確にするために、MySQLclient-python は MySQL C ライブラリの Python ラッパーです。このため、MySQLclient-python を使用する前にコンパイルする必要があります。これは現在 OS X 10.7 で作業しており、私の目標は、OS X の複数のバージョンで動作する MySQLclient-python のコンパイル済みバージョンを作成することです (libmysql のバンドルは既に処理されています)。現在、MySQLclient-python を完全に正常にコンパイルしており、10.7 で動作します。ただし、10.8+ でテストすると壊れます。MySQLclient-python をコンパイルするために、私は python 3.5 を使用して実行しています

これにより、2 つのことが起こります。最初に、_mysql.o オブジェクト ファイルは、このようなコマンドを使用してコンパイルされます。次に、このスクリプトを使用して共有オブジェクト ファイルがコンパイルされます。明確にするために、これらのコマンドは主に setup.py によって生成されます。

結果のビルドには構造があります

さて、走ると

libSystem.B.dylib に依存していることを明確に示しています。現在、依存関係は一般的に問題ではなく、これは 10.7 で正常に動作します。Pythonモジュールをインポートして正しく使用できます。ただし、10.11 に切り替えると、この同じモジュールで次のエラーが発生します。

明らかに、私の最初の考えは、依存関係に問題があるということです。それが問題だと思います。正直なところ、ここからどこへ行けばいいのかわかりません。明らかに、OS X は静的リンクを強く思いとどまらせます。もう一度明確にするために、私の目標はこれを複数の OS X プラットフォーム (10.7-10.11) で使用できるようにすることであり、これは現在 10.7 で動作します。何か案は?

0 投票する
1 に答える
3351 参照

macos - install_name_tool を使用して dylib ファイルのパスを修正します

OS を El Capitan にアップデートした後、C++ プロジェクトをコンパイルしようとしています。ただし、途中でいくつかの障害に直面しました。

問題は、それpathBが存在しないことです。私が実行するotool -L pathA/libIceUtil.34.dylibと、私は得る

install_name_tool -change pathB/libIceUtil.34.dylib pathA/libIceUtil.34.dylib pathA/libIceUtil.34.dylib問題を解決しませんでした。の使用について言及している記事libtoolがあります。この問題を解決する方法はありますか?

0 投票する
1 に答える
1583 参照

c++ - ブースト ライブラリへの依存関係にフル パスがありません

カスタムプレフィックス( )でビルドおよびインストールされたブーストライブラリへの依存関係を使用して、ダイナミックライブラリを正常にビルドしました./b2 install --prefix=PREFIX。ただし、otool -Lライブラリで実行すると、次のような出力が得られます。

これは、他の依存関係とは異なり、これらのブースト ライブラリへのフル パスなしで提示されます。これにより、ライブラリがアプリによって読み込まれるときに実行時エラーが発生します。install_name_toolこの問題を手動で修正するために使用できることを知っています。ただし、理解しようとしているのは、ブーストライブラリでのみ発生し、ライブラリが依存する他の依存関係では発生しないのはなぜですか?

編集

build コマンドの例を挙げるように求められましたが、いつものように、「実際の」例はもう少し複雑です。私の場合、libA.dylibブーストに依存するライブラリがあります。それから、ブーストにもlibMy.dylib依存する私のライブラリがあります。libA.dylibこの問題はconfigure、単純なライブラリの存在チェックが実行されるステップで発生します ( に似たカスタム テスト プログラムAC_CHECK_LIB)。libA.dylibこのチェックは、の可用性を証明するためにリンクされている小さなテスト プログラムをビルドしようとしlibA.dylibますが、ブースト ライブラリが見つからないというエラーが原因で失敗します。もちろん、otool -L libA.dylibフルパスなしでブーストライブラリを提供するため、それらは見つかりません。

0 投票する
1 に答える
569 参照

c++ - ブーストのビルド時に「dll-path」は効果がありません

dll-pathブーストをコンパイルするときにオプションを提供することで、コンパイルされたブースト ライブラリに完全な実行パスを持たせることを目指しています。

ただし、$(pwd)/buildフォルダー内のライブラリをチェックすると、次のようになります。

つまり、lib 名のフル パスの代わりに、lib 名 (libboost_system.dylib) だけがあります。オプションをどのように使用する必要がありますか、またはこれを達成するための「公式」の方法はありますか (各ライブラリdll-pathで手動で実行するスクリプトを使用する以外に)?install_name_tool

0 投票する
1 に答える
7062 参照

macos - dylib ライブラリ パスを作成し、アプリケーションで使用します

Mac OS X El Capitan (10.11.x) でライブラリを作成し、qt 作成者によって別のアプリケーションで使用したいので、この設定で qt で簡単なライブラリを作成しました。

ご覧のとおり、MyFrm フレームワークに「DynminLinkingLib」ライブラリを作成しました。その後、ライブラリを使用する Qt アプリケーションを作成しました。

Qt でアプリケーションを実行すると、次のエラーが表示されます。

Qt プロジェクトでこのエラーを解決するために、DYLD_LIBRARY_PATH変数をに設定する/System/Library/Frameworks/MyFrm.framework/dylibとうまく機能しますが、バンドル アプリケーションを実行すると機能せず、次のエラーが表示されます。

ここに画像の説明を入力

これは、「libDynminLinkingLib.1.dylib」がアプリケーション パスにないためです。

2 つの質問があります。

  1. この問題を解決する方法は知っていますinstall_name_toolが、qmake と .pro ファイルでこの問題を解決したいと考えています。では、pro config ファイルでこの問題を解決するにはどうすればよいでしょうか?

  2. エルキャピタンではDYLD_LIBRARY_PATH、セキュリティ上の理由からご利用いただけません。それを使用するには、SIP (システム整合性保護) を無効にする必要があります。SIPを非アクティブ化せずにDYLD_LIBRARY_PATHを使用する方法はありますか?

0 投票する
0 に答える
382 参照

macports - libiconv.2.dylib が原因で PHP のアップグレードが失敗します。シンボリックリンクする必要がありますか?

PHP 5.5 から PHP 5.6 にアップグレードしようとしています。curl次に、インストール時に次のエラーが表示されます。

私は持っている:

  1. dylib に環境変数が設定されていません
  2. otool -L /opt/local/lib/libiconv.2.dylib戻り値:/opt/local/lib/libiconv.2.dylib (compatibility version 8.0.0, current version 8.1.0)
  3. port installedlibiconv @1.14_0 (active)最新バージョンの を返します。

次のようになります。

otool -DL /usr/lib/libiconv.2.dylib

戻り値:

そのため、システム バージョンは PHP インストールによってアクセスされています。ローカルの lib バージョンを指すようにするにはどうすればよいですか?

とりあえず頑張っsudo port -n upgrade --force libiconvて..