Как упаковать C++ с dll и библиотеками

Мне интересно, как "упаковать" проект C++ для выпуска. Он использует различные библиотеки, и я не хочу, чтобы пользователь проходил через ту же настройку, что и я, с размещением правильных файлов в нужном месте и т. д. Мне было трудно исследовать это, потому что я не уверен, что технический термин для этой проблемы. Если я использую компиляцию командной строки в Linux, есть ли простой способ сделать это?

3 ответов


ваш подход к этому будет отличаться в 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, чтобы связать статически.


в windows я бы рекомендовал wix http://wix.sourceforge.net/ для создания .установщик msi Я хотел бы указать, путь поиска для .я рекомендую поставить все .DLL в той же папке .ехе так как это имеет наивысший приоритет

однако VC crt (библиотека времени выполнения c / C++) должен быть установлен с помощью пакета перераспределения от microsoft - > обновления автоматически http://www.microsoft.com/de-de/download/details.aspx?id=5555

Wix может включать в себя пакет перераспределения в то же самое .поэтому msi необходимо развернуть только один файл установщика.


вы имеете в виду установщика?
В Windows программа, которую вы запускаете, чтобы установить новое приложение, которое выходит все в правильном каталоге, создает меню "Пуск" и позволяет вам удалить его?

в Visual Studio есть конструктор установщика (возможно, не в бесплатной экспресс-версии), который делает .файлы установщика MSI. Он довольно прост в использовании для простых задач, но становится сложным делать что-то еще.

альтернативно, чтобы создать традиционную настройку.типа exe устанавливает я использую отличную free помощи innosetup

в linux вы обычно создаете пакет, используя любой формат, который использует ваш дистрибутив (.дебютантка. / оборот в минуту.) Есть много инструкций по специфике каждого из них, и инструменты для этого, вероятно, уже будут установлены в вашей системе Linux