これが私の目標です。Linux でソフトウェアを開発し、ソース コードなしで配布する必要があります。アイデアは、実行可能ファイルを実行するために必要なすべてのアイテムを含む zip ファイルを作成することです。ユーザーが zip をダウンロードして展開し、ダブルクリックすると、Linux ベースのマシンでソフトウェアが起動します。説明しない動機については、deb/rpm/etc またはインストーラーを使用できません。
sw には次の依存関係があります。
- いくつかのライブラリ (OpenCV に依存する自分で作成)、g++ でコンパイル、.a ファイル (つまり、静的ライブラリ) を作成
- いくつかの依存関係を持つ共有ライブラリ内の OpenCV
プログラムを gcc でコンパイルし、次のようにリンクします。
$ gcc -o my_exe <*.o files> -L<path my_lib> -Wl,--rpath,\$$ORIGIN/lib -lm -lstdc++ -lmy_lib -lopencv
それから私は:
$ ldd my_exe
./lib にリストされているすべてのライブラリをコピーし、.zip を作成します。
zip を別のマシンにコピーすると、リストされている依存関係ldd my_exe
が満たされ、正しく ./lib を指していますが、プログラムを起動すると、次のエラーが発生します。
$ ./my_exe: relocation error: lib/libglib-2.0.so.0: symbol strncmp, version GLIBC_2.2.5 not defined in file libc.so.6 with link time reference
どうしたの?私の間違いはどこですか?
いくつかの追加情報:
$ -bash-3.2$ nm -D lib/libc.so.6 |grep strncmp
0000000000083010 T strncmp
$ -bash-3.2$ strings lib/libc.so.6 |grep GLIBC_2.2
GLIBC_2.2.5
GLIBC_2.2.6
私はgcc 4.4.5、カーネル2.6.35 SMP、64ビットのUbuntuを使用しています。私が試したマシンも 64 ビット SMP カーネル 2.6 です。