我有一个包含很多类的程序(cpp)。每个类都在单独的源文件(.h + .cpp)中。
如何将已编译的程序拆分为多个文件(而不是一个大的可执行文件)?
假设每个类都有一个文件(与代码结构相同)。
这样,每次特定类发生更改时,我仅编译该类,并替换与该类相关的特定已编译文件。
(类似于Windows中的.DLL文件。)
现实生活中的例子:
我正在制作用于管理mysql的TUI界面。
我想用ncurses创建mysql文本编辑器(TUI)。
用于创建和管理单个窗口对象的代码(类)在 'textWin.cpp'+'textWin.h'
通过从上一类创建Windows对象来管理多个窗口的代码(类)位于winMan.cpp winMan.h
用于管理mysql数据库的代码(类)在: mysql.cpp mysql.h
以此类推...
所以,我有以下文件:
MyProgram.cpp
-winMan.cpp + winMan.h
-textWin.cpp + textWin.h
-mysql.cpp + mysql.h
-..
-..
经过g ++编译后,我得到一个可执行文件“ ./MyProgram”(大小约为15Mb),并将其交付给所有客户(其中有1000多个)。
我刚刚在textWin.cpp中发现了一个错字,我对其进行了修复,并告诉所有客户有一个更新……他们所有人都需要下载一个15Mb的大文件,这占用了带宽和服务器资源。 ,只需进行少量更新。
有没有一种方法可以向所有客户发送较小的文件,该文件仅包含textWin类的已编译代码?
我在Centos7上使用g ++
答案 0 :(得分:0)
当然,您可以将您的文本放入单独的文本文件中,然后仅将其部署在存在错误的地方。对于您的特殊用例,必须部署二进制差异,此问题可能会有所帮助:How do I create binary patches?
另一个选项,进行正确的版本控制。这样,您的客户也许可以自行决定。也就是说,如果他们需要此更新。
答案 1 :(得分:0)
gcc编译器将愉快地获取一系列cpp文件,以便一起编译以生成一个可执行文件。您无需编写“包含” cpp文件。但是,仍然存在每次重新构建它们全部的问题。
另一种方法是将每个源文件分别构建为目标文件,然后将所有源文件链接在一起。希望编译器的这些调用中的每个调用所花费的时间将少于单个命令行。但是,如何跟踪实际上需要重建哪些cpp文件?
通常的方法是使用一个makefile和一个make实用程序,它将检查所有提到的文件的日期。有各种各样的makefile和辅助makefile引擎。下载一个简单的软件包,例如gzip,您可以快速了解Makefile的结构。然后,有很多在线帮助,或者您可能认为这对于包含5个文件的项目来说太麻烦了。
答案 2 :(得分:0)
如@RSahu的评论中所述
共享库(.so文件)是拆分已编译代码的方法。
这是一个小例子:
https://www.cprogramming.com/tutorial/shared-libraries-linux-gcc.html