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). Каждый не может быть экспертом во всем;)

(Извините, что бродил немного. Плохие настройки проекта - моя любимая мозоль).

Другие вопросы по тегам