基本上,我正在使用g++ -c -o one.o one.c
单独编译一些C文件,然后尝试将它们与g++ -o one.exe one.o two.o three.o
链接起来。链接器抱怨对one.c调用的函数的未定义引用,并在two.c中声明。但是,如果我objdump -d two.o
函数存在,那么我很困惑为什么链接器找不到它们?
e:如果我给链接器选项-y <symbol>
,它会打印定义符号的目标文件。
答案 0 :(得分:1)
重置设置:
one.cpp:
#include "two/two.h"
int main(void) {
two();
return 0;
}
生成文件:
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
2 / two.h:
void two(void);
2 / two.c:
#include <stdio.h>
#include "two.h"
void two(void) { printf("Two\n"); }
2 /生成文件:
all:
gcc -c -o two.o two.c
我要修复的只是将两个/ Makefile更改为使用g ++而不是gcc:
2 /生成文件:
all:
g++ -c -o two.o two.c
答案 1 :(得分:0)
我发生了完全相同的事情。 在头文件(.h)中做
#ifdef __cplusplus
extern "C" {
#endif
// Your code
#ifdef __cplusplus
}
#endif
解决了我的问题。