ошибка nanodbc LNK2019: неразрешенный внешний символ — при базовом соединении

#c #visual-c #nanodbc

#c #visual-c #nanodbc

Вопрос:

Я пытаюсь подключиться к базе данных MySQL с помощью драйвера ODBC, используя библиотеку nanodbc, оболочку C для ODBC, но я получаю error LNK2019: unresolved external symbol

Я добавил путь к каталогу установленной библиотеки в дополнительный каталог библиотеки, где находится nanodbc.lib. Я даже скопировал nanodbc.lib в свой исходный каталог, но все равно не повезло.

Я добавил nanodbc.lib в Properties-> Linker-> Input-> Дополнительные каталоги на случай #pragma comment(lib, "nanodbc.lib") , если он не работает, но он все еще не работает.

Хуже всего то, что один и тот же код работает в существующем проекте (с другой строкой подключения).

Инструментарий: сообщество Microsoft Visual Studio 2017 Версия 15.9.11

Менеджер пакетов: vcpkg

ОС: 64-разрядная версия Windows 10 Professional

Стандарт языка: C 17

Код :

 #include <iostream>
#include <nanodbc/nanodbc.h>

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

int main()
{
    nanodbc::string dns = "PLC_Interface";
    nanodbc::string user_name = "root";
    nanodbc::string password = "rooot";
    nanodbc::connection conn(dns, user_name, password);
    std::cout << conn.connected() << std::endl;
    //std::cout << "Database Name : " <<conn.database_name() << std::endl;
    //std::cout << "DBMS Name : " <<conn.dbms_name() << std::endl;
    //std::cout << "DBMS Version : " <<conn.dbms_version() << std::endl;
    conn.disconnect();
    std::cout << conn.connected() << std::endl;
}
  

Ошибка :

 error LNK2019: unresolved external symbol "public: __cdecl nanodbc::connection::connection(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const amp;,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const amp;,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const amp;,long)" (??0connection@nanodbc@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@00J@Z) referenced in function main
  

Комментарии:

1. Вы пробовали передавать nanodbc.lib компоновщику напрямую вместо использования pragma ? Я даже не знал, что вы можете сделать это с pragma помощью!

2. Должно быть два шага. Сначала передайте каталог, который содержит nanodbc.lib компоновщик. Во-вторых, передайте имя файла nanodbc.lib компоновщику. У меня нет опыта работы с VS, но похоже, что вы делаете только первый шаг.

3. Да, как упоминалось в моем сообщении, я передал nanodbc.lib в Properties-> Linker-> Input-> Дополнительные каталоги. Я также добавил путь к каталогу, как упоминалось.

4. Вы помещаете файл в поле Дополнительные каталоги ?

5. Я добавил путь к каталогу, в котором находился файл nanoodbc.lib.

Ответ №1:

Решена проблема. Проблема заключалась в библиотеке, созданной менеджером пакетов vcpkg. Когда я сам создал библиотеку вручную, проблема была решена. Изменение кода не потребовалось (даже при работе с #pragma ).


Хотите знать, есть ли у них какой-либо способ сравнить библиотеки, чтобы выяснить, почему проблема была вызвана в первую очередь?