Visual C ++ 2005 не добавляет аргумент / dll для компоновщика - PullRequest
3 голосов
/ 19 августа 2009

Какие параметры в проекте Visual Studio 2005 могут привести к тому, что сборка не добавит аргумент / dll в командную строку компоновщика?

Справочная информация:

У нас есть большой проект VC6, который я портирую на VC 2005. Этот проект содержит несколько расширений DLL MFC, и при запуске сборки я получаю следующее предупреждение компоновщика:

предупреждение LNK4086: точка входа '_WinMainCRTStartup' не является __stdcall с 12 байтами аргументов; изображение может не работать

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

Просмотр аргументов командной строки linker.exe показывает проблему (для краткости я удалил полные пути):

/ OUT: "Debug \ thedll.dll" / INCREMENTAL / MANIFEST /MANIFESTFILE:"Debug\thedll.dll.intermediate.manifest "/DEF:".\thedll.def" / DEBUG / PDB: "\ Debug \ thedll.pdb "/ SUBSYSTEM: WINDOWS / MACHINE: X86 version.lib

Отсутствует крайне критичный аргумент командной строки: / DLL

Если я вручную добавлю этот аргумент (используя свойства проекта, Конфигурационные свойства \ Компоновщик \ Параметры командной строки), я смогу заставить вещи правильно скомпилироваться.

Но мне интересно, что в конфигурации проекта не учитывает параметр командной строки / DLL файла linker.exe?

Я создал временный проект с расширением DLL и провел параллельное сравнение файлов .vcproj, но не вижу каких-либо конкретных настроек, которые могли бы повлиять на это.

РЕДАКТИРОВАТЬ - я проверил настройку Configuration Properties \ General \ Project Defaults для типа конфигурации. Для него задана динамическая библиотека (.dll)

EDIT2 - Очевидно, VS игнорировал настройку, пока я не отрегулировал ее вручную. rggggg

Ответы [ 2 ]

1 голос
/ 19 августа 2009

Первое, что я могу предложить, это убедиться, что тип конфигурации проекта установлен на Динамическую библиотеку. Щелкните правой кнопкой мыши проект -> Выберите Свойства -> Выберите Общие -> Тип конфигурации.

0 голосов
/ 23 июня 2014

Кажется, что компоновщик хочет собрать консольную программу. Откройте свойства проекта. Выберите Общие настройки. Выберите там тип конфигурации Dynamic Library.

...