.soを私の実行可能ファイルに静的にリンクする

.soを私の実行可能ファイルに静的にリンクする

私は商用ソフトウェアプログラムを中心に書いた.cppコードを持っており、利用可能な大規模なC ++ライブラリクラスを提供しました。共有オブジェクトの1つをlibtdfdll.so私の実行可能ファイルに静的にリンクしたいと思います。彼らは私にファイルを提供しませんlibtdfdll.a.so私はg ++ 4.8.3を使用してSLES 11.4でこれを行っています。

私のcppファイルはprocess_tdf_v12.5.cpp

動作する基本的なダイナミックリンクのために今行うことは次のとおりです。

g++ process_tdf_v12.5.cpp -I../tdflibs12.5/include -L../tdflibs12.5/lib -ltdfdll -lm

これはコンパイル/リンクにも機能します。

g++ process_tdf_v12.5.cpp -I../tdflibs12.5/include ../tdflibs12.5/libtdfdll.so -lm

しかし、実行ファイルを実行すると

error while loading shared libraries: libtdfdll.so.1: cannot open shared object file: No such file or directory

私が作らない限り

setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/home/ron/tdflibs12.5/lib

私はこれをしたくありません。

process_tdf_v12.5.cpp私の実行可能ファイルの1つに特定のバージョンの12.5が含まれているので、正しいtdflibs12.5/lib/libtdfdll.so12.5バージョンを別のシステムにコピーしlibtdfdll.soたり、問題を引き起こす他の.soバージョンを心配する必要はありません。どうすればいいですか?

.soファイルのみを取得した場合は、それを使用して静的リンクを完了できますか?

また、他のファイルを静的にリンクしたくないので、このlibtdfdll.soファイルだけをリンクしたいと思います。

答え1

これは不可能です。共有ライブラリには、静的ライブラリに含まれる情報の一部が不足しています。 XYに問題があるようです。共有ライブラリを静的にリンクする方法を尋ねていますが、実際に必要なのはアプリケーションをデプロイするより良い方法です。私は次のようなものを使用することをお勧めしますミンク。共有ライブラリを実行可能ファイルにまとめて静的にリンクされたライブラリのように見せます。

しかもフラットパック。現在経験している問題を解決できない可能性がありますが、単純な共有ライブラリではなく、アプリケーションとの依存関係を提供する非常に移植性の高い方法を提供します。

関連情報