链接到静态库时出现未定义的符号错误

时间:2014-08-07 09:24:59

标签: c++ linker static-libraries static-linking

我有一个项目(项目1),它编译成一个库(libtest.a)。它包含test.cpptest.h,如下所示。

test.h包含:

void test();

test.cpp包含:

#include "test.h"
void test() {}

libtest.a编译时没有错误或警告。


我有另一个项目(项目2),它链接到项目1的libtest.a,编译成可执行的二进制文件。它包含main.cpp,如下所示。

main.cpp包含:

#include "../test/test.h"

int main() {
    test();
}

../test/test.h是项目2中main.cpp与项目1中test.h的相对路径。)


当我编译项目2时,我得到了

Undefined symbols for architecture x86_64:
  "test()", referenced from:
      _main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

如果我完全删除test()的实现,则会出现同样的错误,如果我将定义放在test.h而不是test.cpp,那么一切都会编译。这让我相信项目2能够看到test.h但不能test.cpp。为什么?我该如何解决这个问题?

0 个答案:

没有答案