Visual studio: как правильно использовать режим релиза

0

Я пытаюсь выпустить свою программу как сборку выпуска. Я переключился в режим выпуска, а затем мой файл *.h сломался.

#include "GL\glew.h"
#include "GLFW\glfw3.h"
#include "ft2build.h"
#include "FTGL\ftgl.h"

//#include "GL/glew.h"  
//#include <GLFW/glfw3.h> 
//#include <ft2build.h>
//#include <FTGL/ftgl.h>

Выше я включил. Оба набора приводят к следующей ошибке:

1> C:\Users\student\Documents\VSTest\hw2_hci\Release\hw2_hci.exe: фатальная ошибка LNK1120: 33 нерешенных внешних

Теперь я исхожу из фона Java, который очень легко понять.

Если бы я должен был перейти к версии выпуска, где должна располагаться моя библиотека DLL и другие библиотеки (например, ftgl или glfw), чтобы при попытке запустить эту программу на любом компьютере с Windows 7 она будет работать (за исключением обновлений c++ требуется и т.д. os).

  • 3
    используйте диалоговое окно «Свойства» для настройки пути включения, пути к библиотеке и т. д. Это необходимо сделать как для отладки, так и для сборки выпуска. Есть также Все конфигурации, которые вы можете выбрать для внесения изменений в конфигурации сборки Debug и Release.
  • 1
    @RichardChambers На самом деле, гораздо проще просто отредактировать файл .vcxproj с помощью обычного редактора, чем пытаться сделать это для всех возможных типов сборки.
Показать ещё 6 комментариев
Теги:
visual-studio-2012

2 ответа

0

Каждая конфигурация проекта использует собственный независимый набор параметров.

Очевидно, что ваша программа использует некоторые внешние библиотеки. Вы добавили эти библиотеки в настройки компоновщика конфигурации Debug вашего проекта. Но вы никогда не добавляли их в настройки компоновщика конфигурации Release. Отсюда и ошибки.

Перейдите к настройкам проекта, проверьте все настройки, которые должны быть инвариантными между сборками Debug и Release и убедитесь, что они синхронизированы. В этом случае это будет Linker->Input->Additional Dependencies.

В будущем, когда вы меняете параметры проекта, которые не являются конкретными для конкретной конфигурации (например, Debug или Release build), убедитесь, что вы всегда выбираете "Все конфигурации" в диалоговом окне настроек перед вводом новых значений.

0

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

a) Каждая конфигурация проекта (Release/Debug) должна быть настроена отдельно в терминах включенных библиотек (если вы не используете правильно настроенные листы свойств). Итак, во-первых, переключите свое решение на выпуск, а затем посмотрите на свои настройки проекта → Linker → Input-> Additional Dependencies. Вы должны быть уверены, что там присутствуют библиотеки OpenGL и FTGL. Когда вы добавили их в Debug, это не значит, что они добавлены в Release, вы должны сделать это снова.

б) В некоторых библиотеках есть два аромата: один с суффиксом *d и некоторые без него (например, MyLibd.lib и MyLib.lib). Тот, у которого есть d-суффикс, является вариантом отладки, где некоторые функции могут иметь разные символы. Убедитесь, что вы добавили библиотеки d-suffix в свой Debug, а также без суффикса в настройке Release.

Сама проблема означает, что некоторые функции не могут быть найдены компоновщиком. Просматривая конкретные ошибки компоновщика, вы можете увидеть имя отсутствующей функции, в основном несколько запутанное (называемое "mangeling") следующим образом:

unresolved external symbol "void __cdecl MyFunction(int,int)" (?MyFunction@@YAXHH@Z) referenced in function _main

Это означает, что MyFunction не удалось решить, и вы должны убедиться, что импортируете надлежащую библиотеку импорта DLL, которая содержит эту функцию.

EDIT: Как предложил AndreyT, очень хорошая идея выбрать настройку "Все конфигурации" из раскрывающегося меню в диалоговом окне настроек проекта, когда вы делаете изменения в настройках проекта и хотите, чтобы они были в каждой конфигурации. Это избавляет вас от необходимости повторять то же самое для каждой конфигурации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню