如何部署可移植的C++;应用 我用QT库编写了一个可移植的C++应用程序。这意味着我不能在编译时使用MT标志而不冒内存问题的风险

如何部署可移植的C++;应用 我用QT库编写了一个可移植的C++应用程序。这意味着我不能在编译时使用MT标志而不冒内存问题的风险,c++,deployment,C++,Deployment,这给我留下了两个选择: 1) 使用安装程序部署可移植应用程序 2)将同一个文件夹中的C++依赖项打包或使用私有程序集。 第1条和第2条都否定了便携式软件的概念,因此我考虑了第三种选择: 3)在启动应用程序之前,使用iExchange删除C++依赖项。在退出时,删除C++依赖项。 不幸的是,选项3受到了一些stackoverflow成员的抨击。他们甚至不喜欢选项2,这让我只有选项1。如果我使用便携式安装程序,我认为选项1是可行的 有便携式安装程序这样的东西吗?本质上,我希望安装程序在运行我的应

这给我留下了两个选择:

1) 使用安装程序部署可移植应用程序

2)将同一个文件夹中的C++依赖项打包或使用私有程序集。

第1条和第2条都否定了便携式软件的概念,因此我考虑了第三种选择:

3)在启动应用程序之前,使用iExchange删除C++依赖项。在退出时,删除C++依赖项。 不幸的是,选项3受到了一些stackoverflow成员的抨击。他们甚至不喜欢选项2,这让我只有选项1。如果我使用便携式安装程序,我认为选项1是可行的

有便携式安装程序这样的东西吗?本质上,我希望安装程序在运行我的应用程序之前检查是否安装了所需的依赖项(就像普通安装程序一样),如果安装了,则继续运行我的应用程序。否则,向用户提供一个消息框,用户可以下载该消息框,并提供指向URL的链接。我知道我可以编写自己的安装程序,可以在C++中完成这一操作,但我想知道是否有任何安装程序已经提供了这个特定的功能。 windows中用于Qt的DLL非常小,在我看来,在应用程序中部署它们并不是一个问题

据我所知,没有任何程序将Qt DLL放在windows上的某个地方,而另一个程序稍后会找到它(如c:/windows/system32)

我认为,在Linux或拥有大量Qt应用程序的移动设备中,您可以期待重用库的唯一地方。但即使这样,您也必须确保库的版本足够高,足以支持您正在使用的所有功能


希望这能有所帮助。

问题不在于Qt的DLL。问题在于C++的DLL。Qt库静态链接到可执行文件中。对不起,我没说清楚。我提到的MT标志是针对MSVC编译器的。@ USE225853:如果QT DLL是静态链接的,为什么不继续做C++库作为静态链接?@ ZANLYNX:因为内存问题:@ USS225853:听起来像QT人对我的一种欺骗:“我们有记忆问题。我们不必费心去弄清楚问题是什么,我们只需要记录下来,然后继续。”@ZanLynx:由于存在多个堆,这似乎更像是一个基本问题。“如果我没记错的话,/MT静态地链接c运行时。这意味着,每个库和可执行文件都有自己的c运行时版本。静态链接可能会导致您使用的不同堆,而这些堆恰恰会抛出此错误。“老实说,我真的不完全明白。你的问题不是很清楚。我建议添加你提到的stackoverflow问题的链接。我假设你说的是windows部署,但你的目标是什么windows版本?。此外,我怀疑你对“便携式”的定义与其他人的定义不一样(我猜你的意思是“从U盘上跑掉了?”)此外,你的标签似乎不正确-如果这不是QT特定的,为什么要用QT标记?也许这个链接会更有帮助?我再也找不到stackoverflow问题了(我的目标是Windows Vista/7/8。我对可移植性的定义是,它被限制在一个EXE中,并且可以通过U盘运行。
-MT
标志应该与可移植性无关,除非目标平台不支持线程。在这种情况下,通过使用该标志,您很可能已经假设了线程,并且您是h奥塞德。