搬迁错误& Linux sw发行

时间:2011-04-27 15:35:39

标签: linux deployment gcc g++ relocation

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

sw具有以下依赖关系:

  1. 一些库(由我自己编写,依赖于OpenCV),用g ++编译,创建.a文件(即静态库)
  2. OpenCV,在共享库中,具有多个依赖性
  3. 我用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,Ubuntu使用内核2.6.35 SMP,64位。我试过的机器也是64位SMP内核2.6。

1 个答案:

答案 0 :(得分:0)

您似乎重新发明了包管理器(对于.deb,.rpm,...)正在做什么。你为什么不想做一个真正的包。它会使事情变得更简单,更健壮。

由于您使用C ++编写代码,因此您将很难制作适用于libstdc++*.so

的不同版本的内容