libpq с SSL на VC 2010
У меня есть вопрос компиляции libpq на windows (VS2010 32 и 64bit) с поддержкой SSL. Я скачал последний источник postgres, а также OpenSSL Win64 v1.0.1c. Я запустил nmake в папке libpq:
cd postgresql-9.2.2 \ interfaces \ libpq
nmake / f win32.mak CPU = AMD64 USE_SSL = 1 SSL_INC = C: \ OpenSSL-Win64 \ include SSL_LIB_PATH = C: \ OpenSSL-Win64 \ lib
Затем компиляция заканчивается тем, что он не может найти bufferoverflowU.lib. В поисках немного я обнаружил, что эта библиотека развернута с Windows SDK и, поскольку VS 2005 больше не нужен (см. Ошибка линковки Vista / Win 7 SDK bufferoverflowu.lib). Итак, в файле make libpq (win32.mak:20) я закомментировал строку
ADD_SECLIB=bufferoverflowU.lib
и это хорошо компилируется. У меня также не возникло проблем при тестировании этого libpq с помощью ssl.
Нужно ли с плохой совестью отбрасывать bufferoverflowU.lib из сборки или это только потому, что make-файл не для VS 2010? (Кстати: openssl изменил свои имена библиотек на *MD.lib соответственно *MT.lib в папке VC. Старые именованные библиотеки находятся в C:\OpenSSL-Win64\lib, одна папка вверх)
Может кто-нибудь сказать мне, требуется ли bufferoverflowU.lib в сборке VS2010?
Ура, 550
1 ответ
Может кто-нибудь сказать мне, требуется ли bufferoverflowU.lib в сборке VS2010?
Нет, это больше не нужно. bufferoverflow.lib
и друзья были вставлены в код, который проверяет стек cookie. См. Эту КБ: вы можете получать сообщения об ошибках "Linker tools error LNK2001" при создании исходного кода с помощью пакета разработки программного обеспечения Win32 (SDK) или пакета разработки драйверов Windows Server 2003 (DDK) для Windows Server 2003 с пакетом обновления 1 (SP1).
Я считаю, что вы можете решить эту проблему и укрепить свои исполняемые файлы с помощью /GS
переключатель.
nmake /f win32.mak CPU=AMD64 USE_SSL=1 SSL_INC=C:\OpenSSL-Win64\include
SSL_LIB_PATH=C:\OpenSSL-Win64\lib
Вы должны рассмотреть возможность добавления всех параметров, которые обсуждались в разделе Защита кода с помощью защиты Visual C++. Вот список на случай, если вам не хватает времени:
- / GS
- / SafeSEH
- / NXCompat
- / DYNAMICBASE
Кроме того, вы должны #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
если возможно. Наконец, вы должны также добавить #pragma strict_gs_check(on)
к исходным файлам высокого риска в Windows. Его следует использовать экономно, но рекомендуется в ситуациях высокого риска, например, когда исходный файл анализирует входные данные из Интернета.
Обычно в проектах * nix не хватает переключателей безопасности в Windows. Я называю это "отключением", и я видел, что это идет обоими путями (*nix -> Windows и Windows -> *nix). Каждый не может быть экспертом во всем;)
(Извините, что бродил немного. Плохие настройки проекта - моя любимая мозоль).