小编Hav*_*vli的帖子

C程序使用glibc而不是默认库进行编译:执行时拒绝权限

这是我关于stackoverflow的第一个问题,所以我会尽力做好.

语境:

我想提供一个可以在每个Linux发行版上运行的程序(例如,一个将使用C++ 11的程序,在没有C++ 11库的系统上运行).为此,我想复制我的程序使用的所有库,并将它们放在带有可执行文件的文件夹中,这样它就可以使用这些库而不是系统库.

我有两个测试环境: - Opensuse,(GNU libc)2.19 - Ubuntu,(Ubuntu EGLIBC 2.17-Oubuntu5.1)2.17

我在Opensuse下编译我的程序,并在Ubuntu下运行它.该程序使用默认库时效果很好.

项目:

这是main.c:

int main(int ac, char **av) {
printf("Hello World !\n");
}
Run Code Online (Sandbox Code Playgroud)

这是我在Opensuse下的文件夹的树(在没有main.c et exec.sh的Ubuntu下相同):

+ project
|
+---  main.c
+---  a.out
+---  exec.sh
+---+ lib
    |
    +--- libc.so.6
    +--- ld-linux-x86-64.so.2
Run Code Online (Sandbox Code Playgroud)

最后,当我使用简单的编译启动程序时,这里是ldd和readelf:

> gcc main.c -o a.out
> ldd ./a.out
  linux-vdso.so.1 (0x00007fff85f57000)
  libc.so.6 => /lib64/libc.so.6 (0x00007f1fdaaaf000)
  /lib64/ld-linux-x86-64.so.2 (0x00007f1dae75000)
> readelf -d a.out | grep "library\|Library"
  0x0000000000000001 (NEEDED)            Shared library: [libc.so.6]
Run Code Online (Sandbox Code Playgroud)

我做了一些研究,最后发现这篇帖子解释了一下ld-linux.so.

这是我用来编译的脚本: …

linux glibc shared-libraries ld

5
推荐指数
1
解决办法
466
查看次数

标签 统计

glibc ×1

ld ×1

linux ×1

shared-libraries ×1