問題タブ [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.
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 で動作します。何か案は?
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
があります。この問題を解決する方法はありますか?
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
フルパスなしでブーストライブラリを提供するため、それらは見つかりません。
c++ - ブーストのビルド時に「dll-path」は効果がありません
dll-path
ブーストをコンパイルするときにオプションを提供することで、コンパイルされたブースト ライブラリに完全な実行パスを持たせることを目指しています。
ただし、$(pwd)/build
フォルダー内のライブラリをチェックすると、次のようになります。
つまり、lib 名のフル パスの代わりに、lib 名 (libboost_system.dylib) だけがあります。オプションをどのように使用する必要がありますか、またはこれを達成するための「公式」の方法はありますか (各ライブラリdll-path
で手動で実行するスクリプトを使用する以外に)?install_name_tool
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 つの質問があります。
この問題を解決する方法は知っています
install_name_tool
が、qmake と .pro ファイルでこの問題を解決したいと考えています。では、pro config ファイルでこの問題を解決するにはどうすればよいでしょうか?エルキャピタンでは
DYLD_LIBRARY_PATH
、セキュリティ上の理由からご利用いただけません。それを使用するには、SIP (システム整合性保護) を無効にする必要があります。SIPを非アクティブ化せずにDYLD_LIBRARY_PATHを使用する方法はありますか?
macports - libiconv.2.dylib が原因で PHP のアップグレードが失敗します。シンボリックリンクする必要がありますか?
PHP 5.5 から PHP 5.6 にアップグレードしようとしています。curl
次に、インストール時に次のエラーが表示されます。
私は持っている:
- dylib に環境変数が設定されていません
otool -L /opt/local/lib/libiconv.2.dylib
戻り値:/opt/local/lib/libiconv.2.dylib (compatibility version 8.0.0, current version 8.1.0)
port installed
libiconv @1.14_0 (active)
最新バージョンの を返します。
次のようになります。
otool -DL /usr/lib/libiconv.2.dylib
戻り値:
そのため、システム バージョンは PHP インストールによってアクセスされています。ローカルの lib バージョンを指すようにするにはどうすればよいですか?
とりあえず頑張っsudo port -n upgrade --force libiconv
て..