我意识到这个问题已经通过多种方式提出,包括这个非常全面的答案 https://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-how-do-i-fix但我查看了很多并尝试修复我的错误但无济于事。
我正在使用 .cpp 和 .c 文件来创建程序。我用 g++ 编译了所有文件,它似乎没有更多链接错误,尽管它给了我一堆与 C 语法相关的 C++ 错误。这是我使用的命令:
g++ -o program main.cpp /data/*.c -l[...libs]
main.cpp 调用 .c 文件中的函数。
然后我明白,不应尝试使用一个编译器同时编译 .c 和 .cpp 文件,而应使用 gcc 编译器,使用 g++ 编译另一个编译器,然后简单地链接目标文件。
所以我这样做了(.c 文件是库的一部分,并且已经有了 .o 文件)
g++ -c main.cpp
g++ -o program main.o /data/*.o -l[..libs]
但在这里,我会收到从 main.cpp 到预编译 .c 文件调用的函数的“未定义引用”错误,这是我以前没有收到的错误。
有人可以帮忙吗?或者我是否需要提供更多信息?
编辑(更深入的代码摘录,我试图简化,否则将无法阅读,但让我知道如果我仍然需要添加内容,我会尝试删除不必要的代码):
主要.cpp:
#include "header.h"
int main(int argc, char** argv) {
string s1 = argv[2];
fn1(s1)
}
header.h
void fn1(string s1)
mycfile.c
#include "header.h"
void fn1(string s1){
fprintf(stdout, " you entered %s", s1);
fflush(stdout);
}
ANSWER:
@Smeehey 帮助我找到了解决方案,实际上我仍在使用的 .hpp 文件中包含旧标头。但核心解决方案确实是使用外部C{}。