我正在开发一个可移植的C ++应用程序,并寻找一些最佳实践。这个应用程序将经常更新,我需要以这样的方式构建它,以便可以轻松更新程序的各个部分。
任何帮助都会很棒!
答案 0 :(得分:3)
是的,使用库是好的,但是“简单地”用新的库替换库的想法可能是不现实的,因为库API往往会更改,并且应用程序通常需要更新才能利用,或者甚至兼容不同版本的库。虽然有大量的integration testing,但您将能够“支持”一系列不同版本的库。或者,如果您自己控制库代码,则可以确保对库代码的更改永远不会破坏应用程序。
在Windows中,DLL直接等同于Linux中的共享库(如此),如果您在公共环境中编译(在Windows中交叉编译或使用MingW),则链接器将执行此操作同样的方式。当然,假设您的所有其余代码都是跨平台的,并为目标平台正确配置。
IMO,DLL hell在过去,当应用程序将所有DLL安装到像C:\ WINDOWS \ SYSTEM这样的公共目录时,实际上更是一个问题,因为它创建的人们不再那样做了DLL地狱。您可以将共享库放在一个不会干扰其他非感知应用程序的更合适的位置,或者 - 尽可能简单 - 只需将它们放在与需要它们的可执行文件相同的目录中。
答案 1 :(得分:3)
我并不完全相信以任何方式分离程序的可执行部分可以简化升级。在某些罕见的情况下,它可能会使更新安装程序变小,但是工作量会很大,当你得到它错误时肯定不值得。在大多数情况下,将所有可执行代码替换为一个。
另一方面,您要非常小心搞乱用户可能已经更改的任何内容。在作为代码的应用程序部分和作为用户数据的部分之间画一条亮线。小心处理用户数据。
答案 2 :(得分:2)
如果是应用程序,我的第一选择是发送静态链接的单个可执行文件。我有机会研发出一个运送到5个平台(Win2K,WinXp,Linux,Solaris,Tru64-Unix)的产品,并且相信我维护具有大代码库的共享库或DLL是一项艰巨的任务。 假设这是一个非平凡的应用程序,涉及使用第三方GUI,线程等。使用C ++,在所有平台上都没有真正的单向。这意味着您无论如何都必须为不同的平台维护不同的代码库。然后在不同平台上存在第三方库的一些奇怪的行为(错误)。如果使用不同的库版本运送应用程序,即将不同的版本附加到不同的平台,所有这些将产生负担。我看到有人将库发送到所有平台,只有特定平台的修复只是为了避免版本混乱。但事情并非如此简单,客户往往与他/她想要升级/补丁的方式有不同的角度,这也是一个考虑因素。
当然,如果您构建的二进制文件很大,那么可以考虑使用DLL /共享库。即使是这种情况,我建议的是以层的形式构建您的应用程序,如: - 应用 - > GUI - >网站 - >基地 - >基本
所以这里有些库可以为所有平台提供通用代码。只能针对特定行为更新“平台”等特定库。这将使你的生活更轻松。
当你构建一个充当完整解决方案的产品而不仅仅是一个应用程序时,恕我直言,DLL /共享库选项是可行的。在这种情况下,不同的子系统在产品框架内同时使用通用逻辑,然后可以使用DLL /共享库在内存中共享逻辑。
HTH,
答案 3 :(得分:0)
一旦你试图处理两个 Windows和像Linux这样的UNIX系统,生活就会变得更加复杂。
您必须满足哪些服务要求?您可以控制客户端系统何时升级?您需要支持多少个系统?您有多少向后兼容性要求。
答案 4 :(得分:0)
要回答一个问题,如果可移植性是关键目标之一,为什么要将应用程序设为原生应用程序?
您可以考虑迁移到Java或.Net / Mono等虚拟平台。您仍然可以编写C ++库(Linux上的共享库,Windows上的DLL)以获得更好的本机代码,但是您的应用程序的大部分内容都是真正可移植的。