我如何强制gcc链接静态库?

时间:2012-01-06 14:30:31

标签: 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 -o B.o -lA -u symbol_A。这里-u来自GCC手册:

http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

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

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

愿任何人给我一些提示吗?

p.s我在Windows下使用GCC 3.4.4,eclipse + CDT,而B.o将在linux下部署。

1 个答案:

答案 0 :(得分:1)

GCC对-u标志的解释意味着以下内容:

  

如果你有一个符号aka变量或在你的来源中定义的函数告诉   海湾合作委员会假装它是未定义的,所以需要定义这样的变量或   您正在链接的库中的函数。

因此,如果B.c中没有任何内容可以在libA.a中定义,-u标记将无法帮助您,因为symbol_A不需要B.c并且使用相同的标记B.o,因此将被忽略。