Скомпилируйте приложение Win32 без особых зависимостей или размера - PullRequest
0 голосов
/ 24 февраля 2011

Я пытаюсь создать небольшое приложение Win32 с использованием Visual C ++ 2008, но я хочу, чтобы оно работало на любой современной машине с Windows без необходимости доставки дополнительных библиотек и без увеличения его размера, связывая их статически.

Я читал много статей в интернете на эту тему, например: http://kobyk.wordpress.com/2007/07/2...visual-c-2005/

Я понял, что хорошей идеей было бы динамически связать мой проект с msvcrt.dll, который можно найти в любом современномWindows является системной dll, в отличие от более новых сред выполнения, таких как msvcr90, которые меняются с каждой новой версией Visual Studio.

Так что в настройках компоновщика я игнорировал все библиотеки по умолчанию (/ NODEFAULTLIB), к которым я добавил msvcrt.libдополнительные зависимости

Но я получаю кучу «неразрешенных внешних символов» ошибок при компиляции, например:

1>StubLib.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall std::bad_cast::~bad_cast(void)" (??1bad_cast@std@@UAE@XZ)
1>StubLib.obj : error LNK2001: unresolved external symbol "public: __thiscall std::bad_cast::bad_cast(char const *)" (??0bad_cast@std@@QAE@PBD@Z)
1>StubLib.obj : error LNK2001: unresolved external symbol "public: __thiscall std::bad_cast::bad_cast(class std::bad_cast const &)" (??0bad_cast@std@@QAE@ABV01@@Z)
1>StubLib.obj : error LNK2001: unresolved external symbol "long const std::_BADOFF" (?_BADOFF@std@@3JB)

Я также попытался использовать некоторые альтернативные библиотеки времени выполнения C ++, предназначенные для уменьшенияразмер блат как Minicrt, WCRT и т. д. но в любом случае я получаю "неразрешенный внешний symbol "ошибки.

Любая помощь с благодарностью,

заранее спасибо

1 Ответ

0 голосов
/ 24 февраля 2011

«Раздувание» в этом случае происходит от использования STL. Так что, если вы не хотите изменить свой код, чтобы избавиться от ссылок на STL, вам может просто не повезти.

Однако я могу предложить использовать WDK для сборки приложения. В Windows XP файл msvcrt.dll был «посвящен» в системную DLL (то есть всегда на борту, нет необходимости в распространении), и, насколько мне известно, он также был включен в Windows 2000 SP4 + SRP. Так что, если эти минимальные требования вам подходят, используйте WDK для сборки приложения, и весь «раздув» будет в DLL, которые уже должны быть в любой поддерживаемой системе.

...