我知道这个问题已经以多种方式提出,包括这个非常全面的答案,但我查看了很多并尝试修复我的错误,但都没有成功。
我正在使用.cpp和.c文件创建程序。我使用g++编译了所有文件,它似乎没有更多的链接错误,尽管它给了我一堆与C语法相关的C++错误。这是我使用的命令:
主函数main.cpp调用了.c文件中的函数。 然后我明白了,不应该尝试使用一个编译器同时编译.c和.cpp文件,而是要分别使用gcc和g++,然后链接目标文件即可。 所以我这样做了(.c文件是库的一部分,已经有.o文件)。
我正在使用.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文件中的函数时,会出现“undefined reference to”错误,而之前没有出现过这些错误。
有人可以帮忙吗?或者我需要提供更多信息吗?
编辑(更详细的代码摘录,我试图简化此处的内容,但如果需要添加其他内容,请告知,我将尝试删除不必要的代码):
main.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);
}
回答:
@Smeehey帮助我找到了解决方案,实际上是因为我仍然在使用一个.hpp文件中包含旧的头文件。但核心解决方案确实是使用外部C{}。
g++
的参数顺序非常重要,甚至库的顺序也很重要。要更具体一些。此外,始终向g++
传递-Wall -g
。 - Basile Starynkevitch