Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何强制gcc链接静态库?_C_Gcc_Linker_Static Linking - Fatal编程技术网

如何强制gcc链接静态库?

如何强制gcc链接静态库?,c,gcc,linker,static-linking,C,Gcc,Linker,Static Linking,我编写了一个静态库:libA.a。我有另一个名为B.o.B.o的应用程序,在libA.a中没有使用任何函数。我想将libA.o合并到B.o中,然后在B.o运行时,我可以通过其他方法调用libA.a中的一些内容 我这样编写makefile:gcc B.c-ob.o-lA-u symbol\u A。此处-u来自GCC手册: 它建议使用-u强制链接未使用的库,而符号A是libA.A中的某个符号 但它不起作用。链接后,我在B.o.中找不到任何LibA.a的东西 谁能给我一些提示吗 p、 我正在使用GC

我编写了一个静态库:libA.a。我有另一个名为B.o.B.o的应用程序,在libA.a中没有使用任何函数。我想将libA.o合并到B.o中,然后在B.o运行时,我可以通过其他方法调用libA.a中的一些内容

我这样编写makefile:
gcc B.c-ob.o-lA-u symbol\u A
。此处-u来自GCC手册:

它建议使用-u强制链接未使用的库,而符号A是libA.A中的某个符号

但它不起作用。链接后,我在B.o.中找不到任何LibA.a的东西

谁能给我一些提示吗


p、 我正在使用GCC 3.4.4,在windows下使用eclipse+CDT,而B.o将在linux下部署

GCC对
-u
标志的解释如下:

如果您在源代码中定义了符号aka变量或函数,请告知 GCC假装它是未定义的,因此它接受这样的变量或变量的定义 从正在链接的库中删除函数


因此,如果您的
B.c
没有任何可以在
libA.a
中定义的内容,那么
-u
标志对您没有帮助,因为
符号a
不是
B.c
所需要的,同样的
B.o
也将被忽略。

-u标志的解释如下:

如果您在源代码中定义了符号aka变量或函数,请告知 GCC假装它是未定义的,因此它接受这样的变量或变量的定义 从正在链接的库中删除函数


因此,如果您的
B.c
没有任何可以在
libA.a
中定义的内容,那么
-u
标志将不会帮助您,因为
符号a
不是
B.c
所需要的,同样的
B.o
也不需要,因此将被忽略。

您是否正在尝试创建一个对象文件或可执行文件?如果是可执行文件,它们通常没有.o后缀。从外观上看,您正在尝试取消定义函数
symbol\u A.这里
,以便gcc从库中插入定义。你为什么要这样做呢?如果B中的任何东西都没有使用libA中的任何东西,那么libA中的任何东西都不会被添加。另外,我使用的是GCC 3.4.4,eclipse+CDT在windows下,而B.o将部署在linux下。但是在这里,GCC的手册说它可以强制链接…@user1134355仔细阅读说明。此选项告诉GCC符号未定义,并强制链接,即使符号可能已在您的目标文件中定义。您是否尝试创建目标文件或可执行文件?如果是可执行文件,它们通常没有.o后缀。从外观上看,您正在尝试取消定义函数
symbol\u A.这里
,以便gcc从库中插入定义。你为什么要这样做呢?如果B中的任何东西都没有使用libA中的任何东西,那么libA中的任何东西都不会被添加。另外,我使用的是GCC 3.4.4,eclipse+CDT在windows下,而B.o将部署在linux下。但是在这里,GCC的手册说它可以强制链接…@user1134355仔细阅读说明。此选项告知GCC符号未定义,并强制链接,即使该符号可能已在对象文件中定义。