【发布时间】:2012-01-06 14:30:31
【问题描述】:
我写了一个静态库: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下。
【问题讨论】:
-
您是在尝试创建目标文件还是可执行文件?如果是可执行文件,它们通常没有 .o 后缀。从外观上看,您试图取消定义函数
symbol_A.Here以便 gcc 插入库中的定义。你有什么理由想要这样做? -
如果 B 中的任何内容都没有使用 libA 中的任何内容,那么 libA 中的任何内容都不会被添加。
-
p.s我用的是GCC 3.4.4,windows下eclipse+CDT,linux下会部署B.o。
-
但是在这里,gcc.gnu.org/onlinedocs/gcc/Link-Options.html,GCC 的手册说它可以强制链接.....
-
@user1134355 仔细阅读说明。此选项告诉 GCC 符号未定义并强制链接,即使该符号可能已在您的目标文件中定义。
标签: c gcc linker static-linking