Статическое связывание библиотек Visual Studio с динамически связанным проектом sfml - PullRequest
0 голосов
/ 02 июля 2018

У меня есть проект SFML, Visual Studio, который необходимо связать с помощью параметра / MT в настройках библиотеки времени выполнения, поскольку я хочу избежать необходимости распространять Microsoft для распространения на каждый компьютер, на котором выполняется программа.

Когда я добавил sfml в проект, он работал нормально в динамической форме. Тем не менее, когда я попробовал программу на другом компьютере, она сказала мне, что я пропустил Visual Studio DLL.

Я понимаю, что для того, чтобы статически связать sfml с проектом, мне пришлось бы перестроить его с помощью разных библиотек времени выполнения. Мой вопрос: почему он может правильно компилировать sfml, динамически связанный с проектом, и в то же время установить для проекта значение / MT, если ему не удалось статически связать необходимые библиотеки Visual Studio с проектом?

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Это возможно, вам просто нужно создать SFML самостоятельно (что не так сложно сделать).

Просто убедитесь, что для переменной CMake SFML_USE_STATIC_STD_LIBS установлено значение TRUE, чтобы SFML использовал статическую среду выполнения, независимо от того, создаете ли вы статические или совместно используемые библиотеки.

Короче говоря:

  • Клонировать официальный репозиторий .
  • Установить CMake . (Если вы используете Visual Studio 2017, вы также можете напрямую открыть исходный каталог как папку, но настроить переменные немного сложнее.)
  • Создайте каталог сборки, перейдите туда и запустите CMake: cmake -DSFML_USE_STATIC_STD_LIBS=TRUE -DCMAKE_INSTALL_PREFIX=C:/path/where/to/install/SFML C:/path/to/the/cloned/source/repository
  • После этого вы найдете решение и проекты для Visual Studio.
  • Просто создайте проект INSTALL для целей Debug / Release, и вы получите ваш общий SFML, используя статическую среду выполнения.
0 голосов
/ 02 июля 2018

После обсуждения в комментариях мы договорились об этом:

Нередко статически связывают некоторые библиотеки и динамически связывают их с другими, например с языковой средой исполнения. Поэтому компилятор не должен жаловаться на это.

Чтобы получить один исполняемый файл, содержащий все, программа должна статически связать все библиотеки, а они, в свою очередь, также должны статически связать все их зависимости.

В противном случае, если у нас есть одна динамическая библиотека, такая как SFML, эта библиотека, вероятно, в свою очередь будет динамически связываться с библиотекой времени выполнения. И для этого все еще потребуются библиотеки времени выполнения.

...