Naveen_vemuri Ответов: 2

Какая польза от nafxcw.lib/nafxcwd. lib?


*Я ничего не знаю об исходном коде*
у меня есть проект, в котором nafxcw.lib вместе с некоторыми другими библиотеками добавляются в зависимости библиотеки компоновщика.когда я конвертирую этот проект из vs2008 в vs2017, размер exe, сгенерированного в 2017 году, изменяется с примерно 1700 КБ до примерно 4000 КБ.(я беру о release not debug).

когда я удалил nafxcw.lib из зависимостей компоновщика,размер уменьшился примерно до 2000 КБ.
Если я связываю эту библиотеку, то размер увеличивается, а если я удаляю, то размер уменьшается.В обоих случаях сгенерированный exe-файл работает нормально.
я не понимаю, если нет никакой пользы от этой библиотеки, почему размер exe увеличивается?

Что я уже пробовал:

я не понимаю, если нет никакой пользы от этой библиотеки, почему размер exe увеличивается?

2 Ответов

Рейтинг:
1

Richard MacCutchan

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


Рейтинг:
0

Jochen Arndt

NAFXCW-это статическая библиотека MFC. Если вы укажете это в настройках проекта, то код используемых функций из этой библиотеки будет скопирован в ваше приложение и увеличен в размере.

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

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

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


Naveen_vemuri

Но если я удалю nafxcw. lib в vs2008,то он выдает ошибки, но не в vs2017. почему?
Если он использует некоторые функции из этой библиотеки, то он должен выдавать ошибку, верно?

Jochen Arndt

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

2008: удалите библиотеку и проверьте свойство библиотеки MFC (выберите DLL или static; я думаю, что на самом деле он настроен на то, чтобы не использовать MFC). Затем его следует скомпилировать и связать.

2017: сделайте это аналогично.

Конфигурации проекта меняются вместе с версиями VS, и преобразование может охватить не все случаи.

Naveen_vemuri

(VS2017)я только что заметил следующее: если я удаляю nafxcwd.lib в режиме отладки из зависимости компоновщика,я получаю ошибки, но в режиме выпуска, даже если я удаляю или добавляю(nafxcw. lib), ошибок нет.

(Как в vs2008,так и в vs2017)кроме того, я попробовал упомянутые выше пункты.В этом случае программа работает нормально, если я удаляю библиотеки и использую общую библиотеку dll, но выдаю ошибки для статики.

можете ли вы дать мне ясную картину об этом:
1) стандартные библиотеки windows.
2)использовать MFC в статической библиотеке.
3)Использовать MFC в общей DLL.

Jochen Arndt

Я не могу сказать вам почему, потому что у меня нет вашего проекта.

Как уже было сказано:
Похоже, что ваш проект использует ручные настройки вместо предпочтительных настроек библиотеки MFC. Затем вы конвертируете его в 2017 год, который может потерять некоторые настройки и/или 2017 год ведет себя иначе, чем 2008 год, из-за изменений в обработке проекта. Обратите внимание также, что настройки могут отличаться для выпуска и отладки сборки, что приводит к различным эффектам.

Как уже предлагалось:
Удалите определение библиотеки и используйте вместо него общие настройки (статические или DLL) для MFC.

Хороший разработчик предоставил бы некоторую документацию о настройках проекта и о том, почему он выбирает конкретные варианты.