基本上,我分别编译了几个 C 文件g++ -c -o one.o one.c,然后尝试将它们与g++ -o one.exe one.o two.o three.o. 链接器抱怨对 one.c 调用并在 Two.c 中声明的函数的未定义引用。但如果我这样做了objdump -d two.o,函数就在那里,所以我很困惑为什么链接器找不到它们?
e:如果我给出链接器选项-y <symbol>,它会打印定义符号的目标文件。
设置重现:
一个.cpp:
#include "two/two.h"
int main(void) {
two();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
生成文件:
all: one
one: one.o two.o
g++ -o one.exe one.o two/two.o
one.o:
g++ -c -o one.o one.cpp
two.o:
$(MAKE) -C two
Run Code Online (Sandbox Code Playgroud)
两个/两个.h:
void two(void);
Run Code Online (Sandbox Code Playgroud)
两个/两个.c:
#include <stdio.h>
#include "two.h"
void two(void) { printf("Two\n"); }
Run Code Online (Sandbox Code Playgroud)
二/Makefile:
all:
gcc -c -o two.o …Run Code Online (Sandbox Code Playgroud)