`“未定义引用”
`undefined reference` when trying to interface C to call C++
我试图从C调用C++。我不确定链接顺序。这可能是导致错误的原因。由于某些原因,编译器会抱怨undefined reference to helloWorld
。
有人能提出建议吗?
main.c:
#include "example.h"
#include <stdio.h>
int main(){
helloWorld();
return 0;
}
示例.h:
#ifndef HEADER_FILE
#define HEADER_FILE
#ifdef __cplusplus
extern "C" {
#endif
void helloWorld();
#ifdef __cplusplus
}
#endif
#endif
example.cpp:
#include "example.h"
#include <iostream>
void helloWorld(){
std::cout << "Hello World from CPP";
}
有两种方法可以做到这一点。虽然两者都起作用,但其中一个比另一个"干净"旁注:正如特洛伊木马所指出的,您可能在compile/link命令上遗漏了.o
。
这里有两个步骤:
cc -c main.c
c++ -o mypgm example.cpp main.o
这有点难看,因为通常的约定是编译的源代码是具有main
的源代码
以下是更常见的方式:
c++ -c example.cpp
cc -c main.c
c++ -o mypgm main.o example.o
注:在这两种情况下,"链接器"必须是c++
才能解析example.cpp
使用的std::*
更新:
什么是
mypgm
?
mypgm
[只是一个示例名称]是[完全链接并准备运行]输出可执行文件或程序的名称。这是-o
选项的参数。链接器获取可重定位的输入.o
文件,将它们链接在一起以生成输出文件[现在可以作为命令运行]。
对于示例指令或代码序列中任意的东西,这是一个非常标准的命名法[就像这里的SO]。您可以将"mypgm"替换为"ursa_majors_test_program"或"example",或者您想要的任何内容。要运行程序,请键入./mypgm
[或./ursa_majors_test_program
或./example
]
名称中没有魔术,就像将源文件命名为main.c
和example.cpp
时没有魔术一样
它应该是对功能的描述。如果你说你正在开发一个文本编辑程序,在我的例子中,我可能使用了-o editor
相关文章:
- 编译C++时未定义的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 未定义的引用在哪里
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 已定义函数时出现 G++ "未定义的引用"错误
- 链接 cmake 时出现未定义的引用错误
- 在编译它时显示未定义的引用
- 未定义的引用,尽管存在符号,但 std::experimental::可选
- 只有级联分类器会发出未定义的引用错误
- 如何修复C++中未定义的引用?
- collect2:错误:ld 返回 1 个退出状态未定义的引用
- 运行veins_inet示例 - 未定义的引用的 Omnet++ 问题
- 未定义的引用和运算符 << vs me
- 为什么我的C++代码无法编译,出现未定义的引用错误
- 调用 Win32 API 函数时未定义的引用
- 我的代码中C++未定义的引用错误?
- 模板专用化会导致未定义的引用错误
- 与共享库链接时未定义的引用
- .cpp文件中未定义的引用错误
- Opencv4 使用 pkg-config 给出未定义的引用错误