Библиотеки POCO: Компиляция MinGW (MSYS2) сгенерировала libPocoDataODBC.dll с отсутствующими точками входа (Poco :: Data :: ODBC :: Connector :: registerConnector) - PullRequest
0 голосов
/ 29 октября 2019

Мне удалось скомпилировать библиотеки POCO с MinGW64 (MSYS2). Чтобы собрать его, я установил Windows SDK и добавил в среду PATH путь к mc.exe, поэтому я выполнил:

pacman -S mingw-w64-x86_64-cmake
# Get POCO
git clone -b master https://github.com/pocoproject/poco.git
# set Windows SDK to the PATH
export PATH="/c/Program Files (x86)/Windows Kits/10/bin/10.0.18362.0/x64:$PATH"
# Prepare compilation
cd poco
/mingw64/bin/cmake -G "MSYS Makefiles" ..
# Compile
make

Компиляция прошла успешно, и библиотеки были сгенерированы.

Затем,в коде моего проекта на c ++ я использую POCO :: Data :: ODBC и регистрирую его с помощью:

Poco::Data::ODBC::Connector::registerConnector();

Приложение компилируется, но есть ошибка компоновщика:

undefined reference to `Poco::Data::ODBC::Connector::registerConnector()'

Проверка библиотеки libPocoDataODBC.dll с помощью dllexp.exe. Я могу подтвердить, что для Poco :: Data :: ODBC :: Connector :: registerConnector () * не определена ни одна точка входа

Любая идея о причине этого недостаткаточек входа в библиотеку? Мой код обращается к другим библиотекам POCO без проблем. Это влияет только на Poco :: Data :: ODBC.

Примечание : я связываю библиотеки с параметрами -lPocoDataODBC -lPocoData -lPocoNet -lPocoJSON -lPocoUtil -lPocoFoundation -lPocoNetSSL -lPocoXML

Подобный вопрос я вижу в этот вопрос но без ответа ...

1 Ответ

0 голосов
/ 29 октября 2019

Я только что нашел решение. Я оставляю это здесь на всякий случай, если кто-то найдет это полезным.

Есть некоторые предупреждения, компилирующие файлы для Data / ODBC: что-то вроде

redeclared without dllimport attribute: previous dllimport ignored

для файлов Data\ODBC\src\Extractor.cpp и Data\ODBC\src\Preparator.cpp.

Независимо от этих предупреждений файлы компилируются. Но когда библиотека генерируется, ей не хватает точек входа, как показано в моем вопросе.

Решение состоит в том, чтобы добавить #include "Poco/Foundation.h" в начале Data\ODBC\src\Extractor.cpp и Data\ODBC\src\Preparator.cpp.

Я мог догадаться об этом из этой проблемы с документами .

...