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

如何包装C++;使用DLL和库 我想知道如何“打包”一个C++项目发布。它使用各种库,我不希望用户必须经历与我相同的设置,将正确的文件放在正确的位置等等。我很难研究这个问题,因为我不确定这个问题的技术术语。如果我在Linux上使用命令行编译,有没有一种简单的方法可以做到这一点?,c++,release,C++,Release,你是说安装程序? 在Windows上,您运行的安装新应用的程序会将所有内容显示在正确的目录中,创建“开始”菜单并允许您取消安装 Visual Studio中有一个安装程序生成器(可能不在free express版本中),用于生成.msi安装程序文件。它很容易用于简单的任务,但做更多的事情会变得复杂 或者,为了创建传统的setup.exe类型安装,我使用优秀的免费 在linux上,您通常会使用发行版使用的任何格式(.deb/.rpm)创建一个包。关于每个操作系统的详细信息,有很多说明,并且用于执行

你是说安装程序?
在Windows上,您运行的安装新应用的程序会将所有内容显示在正确的目录中,创建“开始”菜单并允许您取消安装

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

或者,为了创建传统的setup.exe类型安装,我使用优秀的免费


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

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

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

  • 要求用户自己正确安装库。然而,听起来你不想这么做

  • 让用户将库位置添加到LD_library_PATH变量

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

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


  • 在windows上,我建议wix创建.msi安装程序 我想指出,.dll的查找路径我建议将所有.dll放在与.exe相同的文件夹中,因为这具有最高优先级

    但是,vc crt(c/c++运行时库)应该使用microsoft->Update自动提供的重新分发包进行安装


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

    您正在linux上编译DLL?对不起,我很愚蠢,我现在正在linux和Windows上进行开发,我必须在这两个平台上对我的库进行大量安装;我是个新手,可能把两者混在一起了。我必须在库中链接,这是我在Windows上用DLL做的(至少我认为这就是那里发生的事情)。我编辑这个问题只是为了说库,因为我不知道事物之间的技术区别。库有两种版本:静态和动态。静态库直接链接到可执行文件,因此您不必担心将它们放在任何地方(代码是可执行文件的一部分)。对于动态库,您需要确保运行时能够找到它们:您需要将它们放置在公共路径中,或者为库设置搜索路径以包含它们所在的目录。阅读这些内容了解更多信息。为什么不静态链接所有内容?@vidit我想包括静态链接是个好主意。我编辑我的帖子。谢谢你提醒我。静态链接并不总是有效的,例如,当你使用GPL libs但不想在GPL下授权你的程序时。