gcc静态lib链接问题

时间:2012-11-29 06:36:41

标签: gcc static hyperlink

libx.a只有一个函数x(),它什么都不做 liby.a有两个函数,y()不执行任何操作,yx()调用libx.a的x()。 然后,我有一个main.c,在函数main()中我调用了liby.a的y()。当我执行链接作业时,我必须添加libx.a,否则gcc会给出一个错误说明:未定义引用'x'。但我只使用与libx.a无关的y() 在我的情况下,有没有让gcc忽略libx.a?或者换句话说,当真正需要libx.a时,gcc是否只需要libx.a?

libpthread.a和libmysqlclient.a可以做到。我有一个libm.a,它使用libpthread和libmysqlclient。我写了一个main.c,它只调用libm.a中的空函数,gcc在链接时不会请求libpthread.a和libmysqlclient.a。 libpthread / libmysqlclient和我的liby.a之间有什么区别?

2 个答案:

答案 0 :(得分:0)

  

当真正需要libx.a时,gcc只能要求libx.a吗?

是。事实上,只有在真正需要它时才需要它。 在这种情况下,确实需要它。

答案 1 :(得分:0)

几分钟前我从另一个bbs得到了答案: 我们应该在两个独立的源文件中实现y()和yx(),例如y.c中的y()和yx.c中的yx()。执行此操作后,gcc将不需要libx.a!

我测试了它,这是真的!