私は共有ライブラリを呼び出すCソースをコンパイルしており、.soファイル(異なるcpuアーキテクチャ)ではなく、ビルドマシン上にライブラリヘッダのみを持っています。実行時にコードを検索して/usr/lib/libx.soをロードさせるにはどうすればよいですか?.soファイルのない共有ライブラリ用にビルド
0
A
答えて
1
元のLD_LIBRARY_PATHの提案から改訂されました。
Linuxシステム上にあると仮定すると、共有ライブラリはLD_PRELOAD
環境変数を経由して実行を開始する前にロードすることがあります。
$ LD_PRELOAD="/usr/lib/libx.so" your_app
しかし、-Wl,--unresolved-symbols=ignore-in-object-files
とリンクすることはおそらく良い習慣ではありません。私はdlsym
を使用して、動的ライブラリから任意のシンボルを読み込むことをお勧めします。たとえば、このコンパイルする
#include <stdlib.h>
#include <stdio.h>
#include <dlfcn.h>
int main()
{
void *handle;
void (*foo_fp) (void); // function signature from dynamic library
// Dynamically load libfoo.so, searching it from LD_LIBRARY_PATH
handle = dlopen ("libfoo.so", RTLD_LAZY);
// Load function 'foo' from libfoo.so
foo_fp = dlsym(handle, "foo");
// Calls 'foo' from libfoo.so
foo_fp();
return 0;
}
:実行するには
gcc -o main main.c -ldl
を:
export LD_LIBRARY_PATH=<location of libfoo.so>
./main
1
は必要なシンボルをエクスポートし、ファイルlibx.so 'ダミー' を作成します。
関連する問題
- 1. ELF用のプロキシ共有ライブラリ(sharedlib、shlib、so)?
- 2. jnaラッピング共有.soライブラリ - アクセスクラス
- 3. Androidスタジオ - プロジェクトに共有ライブラリ(.so)ファイルとヘッダー(.h)ファイルを追加
- 4. ローカル共有オブジェクト(.soファイル)としてAndroidのexeリンキングシステム共有オブジェクト(.soファイル)
- 5. 共有ライブラリ(.soファイル)をプライベートとしてロードするのはなぜですか?
- 6. goビルドに共有ライブラリを含める
- 7. 静的NTLライブラリを使用してJNIビルド共有ライブラリ
- 8. automakeスクリプトで共有ライブラリ(.so)を作成するには?
- 9. aarファイルにネイティブライブラリ(* .so)ファイルがありません(従属ライブラリが共有ライブラリの場合)
- 10. エラー共有ライブラリのlibstdC++のロード中so.5を
- 11. アンドロイドスタジオの.so共有ライブラリ内のメソッドを呼び出す
- 12. AndroidスタジオのCファイル内で共有ライブラリ(.so)メソッドを呼び出す
- 13. 複数の.so共有ライブラリをマージする
- 14. Android Studioで共有* .soライブラリのリリース版を作成する
- 15. ビルド中に静的ライブラリを共有ライブラリにリンクしますか?
- 16. 利用できない共有ライブラリcom.android.hardware.usb
- 17. 利用できない共有ライブラリcom.google.android.maps
- 18. Embarcadero C++ BuilderでAndroid用共有ライブラリ(* .so)をビルドすることはできますか?
- 19. 共有ライブラリを.soファイルでインストールすることはできません
- 20. glassfish WebサーバーにデプロイされたSpring Webアプリケーションで共有ライブラリ(.so)を使用
- 21. 共有ライブラリ用語
- 22. 共有ライブラリが見つかりません:libhdfs3.so
- 23. Makefileとgccを使用して動的共有ライブラリ(.so、.dylib)を構築する
- 24. FFmpegエラーが共有ライブラリを読み込んでいますlibx265.so.113
- 25. ELFファイルの共有ライブラリの絶対パス
- 26. 共有ライブラリファイル(* .so)のヘッダファイル(* .h)を生成
- 27. ffmpegライブラリ.soファイル(libavutil.so、libavcore.so、libavcodec.soなど)用にコンパイルします
- 28. 共有ライブラリApp.Config
- 29. Websphere共有ライブラリ
- 30. G ++共有ライブラリ
libディレクトリをLD_LIBRARY_PATHに追加します。 –
'dlopen'を使うと'/lib'と '/ usr/lib'を自動的に(その順に)検索します。 – deamentiaemundi
dlsymも呼び出すか、元のシンボル名を使用して-Wlでビルドしますか? - 未解決シンボル=オブジェクトファイルを無視しますか? – Liam