【问题标题】:How to build a Shared Library but use static glibc on Linux?如何在 Linux 上构建共享库但使用静态 glibc?
【发布时间】:2017-06-23 09:18:46
【问题描述】:

我正在尝试使用 gcc 4.8.2 在 centos 上创建一个共享库

共享库代码:

//reload.c
int func(int num){
    return num++;
}

链接命令:

gcc -fPIC -shared reload.c -o reload.so

使用 ldd 命令:

linux-vdso.so.1 =>  (0x00007ffe6aa93000)
libc.so.6 => /usr/lib64/libc.so.6 (0x00007f27feb97000)
/lib64/ld-linux-x86-64.so.2 (0x00007f27ff169000)

现在,想静态链接glibc,怎么写?

喜欢它:

ldd xxx.so
    not a dynamic executable

我尝试了构建选项,但是错误。

gcc -fPIC -shared reload.c -o reload.so -Wl,-Bstatic -lc
/usr/bin/ld: cannot find -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
collect2: error: ld returned 1 exit status

非常感谢

【问题讨论】:

标签: c linux gcc


【解决方案1】:

上面的代码完全不依赖glibc,所以最简单的方法是使用标志-nostdlib进行编译:

$ gcc -fPIC -shared reload.c -o reload.so -nostdlib
$ ldd reload.so
statically linked

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    相关资源
    最近更新 更多