重新定位错误&;Linux软件分发

重新定位错误&;Linux软件分发,linux,deployment,gcc,g++,relocation,Linux,Deployment,Gcc,G++,Relocation,这是我的目标:我在Linux中开发软件,我需要在没有源代码的情况下分发它。其思想是创建一个zip文件,其中包含运行可执行文件所需的所有项目。用户将下载zip,解压缩,双击,软件将在任何基于Linux的机器上启动。出于我不打算解释的动机,我不能使用deb/rpm/etc或安装程序 软件具有以下依赖性: 一些库(由我自己编写,依赖于OpenCV),用g++编译,创建.a文件(即静态库) OpenCV,在共享库中,有几个依赖项 我用gcc编译我的程序,并将其链接到: $ gcc -o my_exe &

这是我的目标:我在Linux中开发软件,我需要在没有源代码的情况下分发它。其思想是创建一个zip文件,其中包含运行可执行文件所需的所有项目。用户将下载zip,解压缩,双击,软件将在任何基于Linux的机器上启动。出于我不打算解释的动机,我不能使用deb/rpm/etc或安装程序

软件具有以下依赖性:

  • 一些库(由我自己编写,依赖于OpenCV),用g++编译,创建.a文件(即静态库)
  • OpenCV,在共享库中,有几个依赖项
  • 我用gcc编译我的程序,并将其链接到:

    $ gcc -o my_exe <*.o files> -L<path my_lib> -Wl,--rpath,\$$ORIGIN/lib -lm -lstdc++ -lmy_lib -lopencv
    
    我复制了./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
    

    我使用的是GCC4.4.5,Ubuntu内核2.6.35SMP,64位。我尝试的机器也是64位SMP内核2.6。

    您似乎重新发明了包管理器(for.deb,.rpm,…)所做的工作。你为什么不想做一个真正的包裹呢。这将使事情变得更简单、更稳健


    和因为在C++中编写代码,在编写与ListBDC++*不同版本的工作时会有困难。因此

    您的错误语句有GLIB版本2,而您的<代码>字符串列出了GLUB版本2.2。这可能是罪魁祸首吗?在第二台机器中,我会:-bash-3.2$ldd my|u exe | grep glib libglib-2.0.so.0=>lib/libglib-2.0.so.0(0x00007fc7d5f4700)-bash-3.2$strings lib/libglib-2.0.so.0 | grep glib glib glib GLIBC_2.8 GLIBC_2.4 GLIBC_2.7 GLIBC_2.3.4 GLIBC_2.9 GLIBC_2.5 GLIBC似乎存在。在任何情况下,在本地机器上,程序都可以运行。。
    $ -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