我们分别使用gcc和g++单独编译文件,编译出cal.o和main.o两个中间文件,很简单,定义了一个embedded_art的函数。
# dong @ ubuntu in ~/WorkSpace/Donge_Programs/Unix_Programming_Learning/c_c++_call_test on git:main x [15:57:32]
$ ls
cal.c cal.h main.cpp
# dong @ ubuntu in ~/WorkSpace/Donge_Programs/Unix_Programming_Learning/c_c++_call_test on git:main x [15:57:43]
$ gcc -c cal.c
# dong @ ubuntu in ~/WorkSpace/Donge_Programs/Unix_Programming_Learning/c_c++_call_test on git:main x [15:57:49]
$ g++ -c main.cpp
# dong @ ubuntu in ~/WorkSpace/Donge_Programs/Unix_Programming_Learning/c_c++_call_test on git:main x [15:57:55]
$ ls
cal.c cal.h cal.o main.cpp main.o下面看一下编译之后的中间文件cal.o和main.o的符号表,看看同一个函数embedded_art不同编译方式之后的差别。
可以看到符号表中,该函数名称正常,然后我们将中间文件链接起来,执行,输出正确结果!
# dong @ ubuntu in ~/WorkSpace/Donge_Programs/Unix_Programming_Learning/c_c++_call_test on git:main x [16:18:36]
$ g++ main.o cal.o
# dong @ ubuntu in ~/WorkSpace/Donge_Programs/Unix_Programming_Learning/c_c++_call_test on git:main x [16:19:54]
$ ls
a.out cal.c cal.h cal.o main.cpp main.o
# dong @ ubuntu in ~/WorkSpace/Donge_Programs/Unix_Programming_Learning/c_c++_call_test on git:main x [16:19:57]
$ ./a.out
main entry
嵌入式艺术4、C调用C++
我们创建3个文件,分别为main.c、cal.cpp、cal.h。
image-20221219162526678
我们分别使用gcc和g++单独编译文件,编译出cal.o和main.o两个中间文件,很简单,同样定义了一个embedded_art的函数。
# dong @ ubuntu in ~/WorkSpace/Donge_Programs/Unix_Programming_Learning/c_c++_call_test/c_call_c++ on git:main x [16:24:45]
$ g++ -c cal.cpp
# dong @ ubuntu in ~/WorkSpace/Donge_Programs/Unix_Programming_Learning/c_c++_call_test/c_call_c++ on git:main x [16:24:52]
$ gcc -c main.c
# dong @ ubuntu in ~/WorkSpace/Donge_Programs/Unix_Programming_Learning/c_c++_call_test/c_call_c++ on git:main x [16:24:56]
$ ls
cal.cpp cal.h cal.o main.c main.o下面看一下编译之后的中间文件cal.o和main.o的符号表,看看同一个函数embedded_art不同编译方式之后的差别。
#ifdef __cplusplus
}
#endif这样就确保了,c++编译embedded_art函数的时候,采用C语法编译,而gcc编译的时候,不作处理。
再次链接,执行!
# dong @ ubuntu in ~/WorkSpace/Donge_Programs/Unix_Programming_Learning/c_c++_call_test/c_call_c++ on git:main x [16:45:06] C:1
$ gcc -no-pie cal.o main.o -o main
# dong @ ubuntu in ~/WorkSpace/Donge_Programs/Unix_Programming_Learning/c_c++_call_test/c_call_c++ on git:main x [16:46:46]
$ ls
cal.cpp cal.h cal.o main main.c main.o
# dong @ ubuntu in ~/WorkSpace/Donge_Programs/Unix_Programming_Learning/c_c++_call_test/c_call_c++ on git:main x [16:49:01]
$ ./main
main entry
嵌入式艺术5、总结