我有一个项目(项目1),它编译成一个库(libtest.a
)。它包含test.cpp
和test.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
。为什么?我该如何解决这个问题?