链接静态库时强制解决未解析的符号错误

时间:2014-08-04 22:01:55

标签: gcc compilation linker

有没有办法可以确保我的静态库中的所有未解析符号都是在链接时报告的,无论它们是否在主程序中使用?

假设我在foo.c中有一个函数foo()

#include <stdio.h>
void foo() {
  puts("foo");
}

我在foo2.c中有一个函数foo2。这会调用bar(),这在任何地方都没有实现。

void foo2() {
  bar();
}

我从这些文件中创建一个静态库

ar cr tmplib.a foo.o foo2.o

现在在main.c中,我调用foo(),但不调用foo2()。所以这个编译,即使它没有找到bar()的实现。

#include "foo.h"
#include "foo2.h"

int main() {
  foo();
  return 0;
}

编译:

gcc main.o libtmpc.a

如果库中的符号在链接时间内未解析,我希望报告错误。我怎样才能做到这一点?

感谢。

1 个答案:

答案 0 :(得分:1)

gcc main.o -Wl,--whole-archive libtmpc.a -Wl,--no-whole-archive