У меня есть вопрос компиляции 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
Может кто-нибудь сказать мне, требуется ли bufferoverflowU.lib в сборке VS2010?
Нет, это больше не нужно. bufferoverflow.lib
и друзья были вставлены в код, который проверяет стек cookie. Смотрите этот KB: Вы можете получать сообщения об ошибках «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 ++. Вот список на случай, если вам не хватает времени:
Кроме того, вы должны #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
если возможно. Наконец, вы должны также добавить #pragma strict_gs_check(on)
к исходным файлам высокого риска в Windows. Его следует использовать экономно, но рекомендуется в ситуациях высокого риска, например, когда исходный файл анализирует входные данные из Интернета.
Обычно в проектах * nix не хватает переключателей безопасности в Windows. Я называю это «отключением», и я видел, что это идет обоими путями (* nix -> Windows и Windows -> * nix). Каждый не может быть экспертом во всем;)
(Извините, что бродил немного. Плохие настройки проекта — моя любимая мозоль).
Других решений пока нет …