相关疑难解决方法(0)

在 GCC 中链接部分静态和部分动态

我正在尝试使用 GCC 的动态和静态链接来编译一个非常简单(就像 hello world 一样简单)的 C 程序。我想知道一般如何做到这一点,所以我的最小测试示例只是尝试将 libc 链接为静态,将 libm 动态链接。

我至少遇到过以下有关同一主题的其他问题:

GCC:仅静态链接一些库

gcc中共享库函数的静态链接

其中的一些答案建议使用 -Wl,-Bstatic 和 -Wl,-Bdynamic 来指定哪些库分别是静态库和动态库。还建议简单地指定要链接的静态库的完整路径。

我已经尝试过其中的一些建议及其变体。我不明白它给我的错误消息。我知道 PIE 是什么,但我不明白它与我想做的事情有什么关系。

以下是一些失败的尝试:

$ gcc test.c /usr/lib64/libc.a
linux-gnu/4.7.3/../../../../x86_64-pc-linux-gnu/bin/ld: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality in `/usr/lib64/libc.a(strcmp.o)' can not be used when making an executable; recompile with -fPIE and relink with -pie
urned 1 exit status
$ gcc test.c -Wl,-Bdynamic -lm -Wl,-Bstatic -lc
/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lgcc_s
/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lgcc_s
collect2: error: ld returned 1 exit status
$ …
Run Code Online (Sandbox Code Playgroud)

c gcc compilation static-linking

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

标签 统计

c ×1

compilation ×1

gcc ×1

static-linking ×1