LNK2005 с libpq в качестве статической библиотеки

Я пишу приложение, которое связывает весь сторонний код через статические библиотеки (включая tinyxml2, sqlite3, openssl и libpq); все работает отлично, за исключением случаев, когда я пытаюсь связаться с libpqd.lib — используя источники 9.1.9 и 9.2.4 — я получаю:

1>LIBCMTD.lib(dosmap.obj) : error LNK2005: __dosmaperr already defined in libpqd.lib(win32error.obj)

Это единственная ошибка, и мои поиски до сих пор были бесплодными. Обратите внимание, что я использую многопоточную библиотеку времени отладки /MTd во всех библиотеках, которые postgresql не имеет по умолчанию; Я вручную исправил win32.mak, чтобы использовать /MTd а также /MT на месте ранее неконфигурируемого /MDd а также /MD, Это решило некоторые предыдущие ошибки компоновщика, но не думаю, что это связано с этим последним, как это было ранее.

Я компилирую libpq через:

nmake /f win32.mak DEBUG=1

и ссылку на него по:

#pragma comment ( lib, "libpqd.lib" )

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

Обычно это легко решаемая ошибка, но я не уверен, где ее искать!

На сайте postgresql существует ветка об этом, но, похоже, она не решена: http://www.postgresql.org/message-id/39E6FC4547C24F9884435E23698B11DC@HIRO57887DE653

1

Решение

После проблем с ним даже при конвертации проекта в / MDd я решил заглянуть в исходный код.

<your_path>\postgresql-9.2.4\src\port\win32error.c -> закомментируйте, или #if 0 функция _dosmaperr,

Библиотеки генерируются, и приложение работает нормально.

Делать grep -R _dosmaperr ./ раскрыл только этот метод; но include/port/win32.h а также include/pg_config_os.h у обоих было это как extern.

Уже немного поздно для моего ума, чтобы сделать правильную голову / хвост, так что пока достаточно хорошо!

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]