首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >gcc共享库函数的静态链接

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

Stack Overflow用户
提问于 2009-04-07 12:34:56
回答 3查看 178.3K关注 0票数 151

如何在gcc中静态链接共享库函数?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-04-07 12:52:06

请参阅:

http://www.linuxquestions.org/questions/linux-newbie-8/forcing-static-linking-of-shared-libraries-696714/

你需要库的静态版本来链接它。

共享库实际上是指定了入口点的特殊格式的可执行文件(包括一些棘手的寻址问题)。它不具备静态链接所需的所有信息。

你不能静态链接一个共享库(或者动态链接一个静态库)。

标志-static将强制链接器使用静态库(.a)而不是共享的(.so)库。但是静态库并不总是默认安装的,所以您可能需要自己安装静态库。

另一种可能的方法是使用statifierErmine。这两个工具都将动态链接的可执行文件作为输入,并创建嵌入了所有共享库的自包含可执行文件作为输出。

票数 119
EN

Stack Overflow用户

发布于 2011-09-06 23:08:07

如果您拥有共享库(.so)的.a文件,则可以简单地将其包含在完整路径中,就像它是一个目标文件一样,如下所示:

这只需编译即可生成main.o:

代码语言:javascript
复制
gcc -c main.c

这会将该对象文件与相应的静态库链接起来,并创建可执行文件(名为"main"):

代码语言:javascript
复制
gcc main.o mylibrary.a -o main

或者在一个命令中:

代码语言:javascript
复制
gcc main.c mylibrary.a -o main

它也可以是绝对路径或相对路径:

代码语言:javascript
复制
gcc main.c /usr/local/mylibs/mylibrary.a -o main
票数 19
EN

Stack Overflow用户

发布于 2009-04-07 12:49:43

在gcc,这是不受支持的。事实上,据我所知,任何现有的编译器/链接器都不支持这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/725472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档