我试图从C调用C ++。我不确定链接顺序。可能是导致错误的原因。出于某些原因,编译器会抱怨undefined reference to helloWorld
。
有人可以提供建议吗?
main.c中:
#include "example.h"
#include <stdio.h>
int main(){
helloWorld();
return 0;
}
example.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";
}
答案 0 :(得分:1)
有两种方法可以做到这一点。虽然两者都有效,但其中一个更清洁&#34;比另一个。 旁注:正如trojanfoe指出的那样,您可能已经在编译/链接命令中取消了.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
注意:在这两种情况下,&#34;链接器&#34;必须c++
才能解析std::*
使用
example.cpp
<强>更新强>
什么是
mypgm
?
mypgm
[只是一个示例名称]是[完全链接并准备运行] 输出可执行文件或程序的名称。它是-o
选项的参数。链接器获取可重定位的输入.o
文件,将它们链接在一起以生成输出文件[现在可以作为命令运行]。
对于在示例指令或代码序列中任意的东西,它是非常标准的命名法[就像这里的SO]。你可以替换&#34; mypgm&#34;用&#34; ursa_majors_test_program&#34;或者&#34;示例&#34;或者您喜欢的任何内容。要运行该程序,请键入./mypgm
[或./ursa_majors_test_program
或./example
]
该名称没有 magic ,就像您没有魔法来命名源文件main.c
和example.cpp
它应该是功能的描述。如果您曾说过您正在编写文本编辑程序,在我的示例中,我可能已经使用过-o editor