本文编写的工程如下:
Myclass的头文件.h/ #pragma once #includeusing namespace std; class Myclass { public: Myclass(); ~Myclass(); void MyPrint(); }; // ///Myclass的源文件cpp/// #include "Myclass.h" Myclass::Myclass() { } Myclass::~Myclass() { } void Myclass::MyPrint() { std::cout << "hello This is sub print" << endl; } // ///数据管理文件DataMange.h #pragma once #include using namespace std; class DataMange { public: DataMange(); ~DataMange(); void DataMangePrint(); }; /// ///数据管理文件DataMange.cpp #include "DataMange.h" DataMange::DataMange() { } DataMange::~DataMange() { } void DataMange::DataMangePrint() { std::cout << endl; std::cout << "hello This is sub2 print" << endl; for (int i=0; i < 5;i++) { std::cout << "DataMangePrint " << i << std::endl; } } /// ///工程文件入口test1.cpp #include #include "Myclass.h" int main() { std::cout << "hello word" << std::endl; Myclass obj; obj.MyPrint(); return 0; }
将上述代码拷贝到linux系统下,linux下的目录结构体如下:
编译有分步编译和直接编译。
1、分步编译(1)生成.o文件,执行指令如下:
/Public/test1$ g++ -c ./Myclass.cpp ./DataManage/DataMange.cpp ./test1.cpp -I ./ -I ./DataManage/
生成的文件如下:
(2)生成可执行目标文件.out
指令如下:
Public/test1$ g++ ./Myclass.o ./DataMange.o ./test1.o -I ./ -I ./DataMange/ -o main
生成的文件如下:
(3)直接运行目标文件,输入命令如下:
/Public/test1$ ./main
结果如下:
2、直接生成目标文件(1)直接生成目标执行文件.out,输入如下命令:
/Public/test1$ g++ ./Myclass.cpp ./DataManage/DataMange.cpp ./test1.cpp -I ./ -I ./DataManage/ -o main
(2)直接运行目标文件。
二、附加 1、编译参数-I ./ 指的是头文件地址
-L / 指的是库文件地址
关于g++编译时的地址符号可参考:linux 下 g++编译程序时,-I(大写i) 与-L(大写l)-l(小写l) 的作用_lin_008的博客-CSDN博客_linux 动态编译-l的作用
其他的编译参数可参考:
g++编译过程和动态链接库_weixin_34080903的博客-CSDN博客
2、编译过程 程序的编译过程分为:预处理(生成.i文件)-》编译(生成.s文件)-》汇编(生成.o文件)-》链接(生成执行文件)详细介绍可参考:
10分钟搞懂g++编译过程_至绽至强的博客-CSDN博客_g++编译
编译静态库和动态库也可参考上面的链接。



