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

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


参考:

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

http://linux.derkeiler.com/Newsgroups/comp.os.linux.development.apps/2004-05/0436.html

您需要静态版本的库链接。

共享库实际上是一种特殊格式的可执行文件,其中指定了入口点(包括一些粘性寻址问题)。 它没有静态链接所需的所有信息。

您不能静态链接共享库(或动态链接静态)

Flag -static将强制链接器使用静态库(.a)而不是shared(.so)但是。 静态库并不总是默认安装。 所以如果你需要静态链接,你必须安装静态库。

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


如果你想链接,比如说,静态的libapplejuice ,但不是,比如liborangejuice ,你可以像这样链接:

gcc object1.o object2.o -Wl,-Bstatic -lapplejuice -Wl,-Bdynamic -lorangejuice -o binary

有一个警告 - 如果liborangejuice使用libapplejuice ,那么libapplejuice也会动态链接。

您必须将liborangejuice静态链接到libapplejuice以使libapplejuice静态。

不要忘记保持-Wl,-Bdynamic否则你最终会链接静态的,包括libc (这不是一件好事)。


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

这通过编译生成main.o:

gcc -c main.c

这将该目标文件与相应的静态库链接起来,并创建可执行文件(名为“main”):

gcc main.o mylibrary.a -o main

或者在一个命令中:

gcc main.c mylibrary.a -o main

它也可能是一个绝对或相对的路径:

gcc main.c /usr/local/mylibs/mylibrary.a -o main
链接地址: http://www.djcxy.com/p/85763.html

上一篇: Static link of shared library function in gcc

下一篇: Linking libraries with gcc: order of arguments