MakeFile.Python & C++ 混编教程 上
对于习惯IDE的Programmer来说 底层实际上是非常陌生的领域 然而下探到C++编译机制,对于一个合格的工程师又是非常有必要掌握的技术因此 本篇文章将讲解利用MakeFile 来实现Python C++混编的目的
首先不同平台的编译,存在着显著的差别:
Linux/UnixLike平台的动态链接库一般为.so为结尾(shared object)
Windows平台的动态链接库一般为.dll为结尾(Dynamic Link Library )
Linux Part:
编译器
在Linux中 主流编译器为Clang以及GNU(GCC,G++)
GCC中支持的语言常用的有
C、C++、Java、Object-C
结构类似于一个标准Unix编译器
而Clang是支持C++,CObject-C,Object-C++语言的编译器前端
其底层采用了LLVM底层虚拟机,在编译Object-C时对比GCC快三倍
总体上:
- GCC特性:
除支持C/C++/ Objective-C/Objective-C++语言外,还是支持Java/Ada/Fortran/Go等;当前的Clang的C++支持落后于GCC;支持更多平台;更流行,广泛使用,支持完备。
- Clang特性:
编译速度快;内存占用小;兼容GCC;设计清晰简单、容易理解,易于扩展增强;基于库的模块化设计,易于IDE集成;出错提示更友好
我们先以GCC为例讲解以下一个典型的C++编译指令是如何工作的
一个典型的Unix like平台的 C++程序编译要经过哪些步骤?
(更详细的解释参照C++编译过程,不再赘述)
而一个 gcc --h显示的帮助信息最常用的部分如下:
-B <directory> Add <directory> to the compiler's search paths
#添加编译器的搜索路径(例如头文件等)
-v Display the programs invoked by the compiler
#显示被编译器调用的程序
-### Like -v but options quoted and commands not executed
-E Preprocess only; do not compile, assemble or link
#只预处理不编译汇编或者链接
-S Compile only; do not assemble or link
#只编译不汇编和链接
-c Compile and assemble, but do not link
#编译和汇编,不连接
-o <file> Place the output into <file>