这是我的目标:我在 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。