报错原因:无法解析的外部命令ave,如何解决?

e.h文件

extern "C" int ave();

```c++

```c++
e.c文件
int ave()
{
    return 1;
}

extern.cpp文件

#include
#include "e.h"
int main()
{
    std::cout << ave();
}

报错原因:无法解析的外部命令ave???
请问有人知道吗

e.c文件改成e.cpp呢

该回答引用ChatGPT

根据给出的代码,如果编译链接时出现无法解析的外部命令 ave 的错误,可能是由于编译器无法找到 ave() 函数的实现。

在这个示例中,函数 ave() 的实现被放在了 e.c 文件中。因此,您需要确保将 e.c 文件编译并链接到您的程序中,以便在运行时 ave() 函数能够被正确地找到和调用。

在 Linux 或 Mac 上,您可以使用以下命令将 e.c 编译为目标文件:

gcc -c e.c -o e.o

这将生成一个名为 e.o 的目标文件,其中包含 ave() 函数的实现。

然后,您可以将 e.o 目标文件与 extern.cpp 文件一起链接到可执行文件中:

g++ e.o extern.cpp -o my_program

这将生成一个名为 my_program 的可执行文件,其中包含 ave() 函数的实现并输出 1。

在 Windows 上,您可以使用 Visual Studio 或 MinGW 工具链来编译和链接您的程序。在 Visual Studio 中,您可以将 e.c 文件添加到项目中并构建解决方案,以便在运行时 ave() 函数能够被正确地找到和调用。在 MinGW 中,您可以使用以下命令将 e.c 编译为目标文件并将其与 extern.cpp 一起链接:


gcc -c e.c -o e.o
g++ e.o extern.cpp -o my_program

编译过了么?


g++ extern.cpp e.h -o extern

如果e.h头文件在其他目录中,可以使用-I选项来指定头文件的路径。例如,如果e.h在/usr/local/include目录下,可以使用以下命令进行编译:

g++ -I/usr/local/include extern.cpp e.h -o extern