7

我想知道如何“打包”一个 C++ 项目以进行发布。它使用各种库,我不希望用户必须进行与我相同的设置,将正确的文件放在正确的位置等等。我很难研究这个,因为我不确定这个问题的技术术语。如果我在 Linux 上使用命令行编译,有没有简单的方法可以做到这一点?

4

3 回答 3

5

您的处理方法在 Windows 和 Linux 上会有所不同,因为每个操作系统都以不同的方式处理它。我对 Linux 比较熟悉,所以我的回答仅限于 Linux 方面。

当您使用 -l 标志将可执行文件与库链接时,链接器默认查找正常的系统库目录,因此这里有四种方法。

  1. 要求用户自己正确安装库。但是,听起来您不想这样做。

  2. 让用户将库位置添加到 LD_LIBRARY_PATH 变量。

  3. 您的第三个选项是强制链接器使用 -rpath 标志在特定路径中查找库。例如,要让应用程序在其工作目录中查找共享库,您可以使用以下命令进行编译:g++ -rpath ./ -l SomeLib -o MyApp myapp.cpp

  4. 另一种选择是将您的代码与其库静态链接,这样您只需分发一个可执行文件。如果存在静态库,您可以使用它g++ -static -l SomeLib -o MyApp myapp.cpp来告诉 gcc 静态链接。

于 2012-06-08T16:14:28.713 回答
2

在 Windows 上,我建议使用 wix http://wix.sourceforge.net/创建 .msi 安装程序,我想指出,.dll 的查找路径我建议将所有 .dll 与您的 .exe 放在同一个文件夹中,因为这具有最高优先级

但是,vc crt(c/c++ 运行时库)应该使用来自 microsoft 的重新分发包安装 -> 自动更新http://www.microsoft.com/de-de/download/details.aspx?id=5555

Wix 可以将再分发包包含在同一个 .msi 中,因此您只需部署一个安装程序文件。

于 2012-06-08T18:44:14.017 回答
1

你是说安装工?
在 Windows 上,您运行以安装新应用程序的程序,该程序将正确目录中的所有内容都删除,创建开始菜单并让您卸载它?

Visual Studio 中有一个安装程序生成器(可能不在免费快递版本中),它生成 .msi 安装程序文件。它很容易用于简单的任务,但做更多的事情变得很复杂。

或者,要创建传统的 setup.exe 类型安装,我使用出色的免费Innosetup

在 linux 上,您通常会使用您的发行版使用的任何格式(.deb / .rpm)创建一个包。有很多关于每个细节的说明,并且这样做的工具可能已经安装在你的 Linux 系统中

于 2012-06-08T16:10:34.070 回答