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