Кто-нибудь знает, как заставить работать libpq в vc++ 2008?
Код:
#include "C:\Program Files\PostgreSQL\8.2\include\libpq-fe.h"
class a
{
// ...
public:
connect()
{
const char* conn = "host=localhost port=5432 dbname=docdb user=postgres password='12345678'";
PGconn* connection;
connection = PQconnectdb(conn);
}
// ...
};
Отдельно включил в проект "libpq-fe.h"
Указал в Свойства проекта->Компоновщик->Библиотека импорта "C:\Program Files\PostgreSQL\8.2\bin\libpq.dll"
В результате компоновщик выдал:
Предупреждения:
"Предупреждение 1 warning LNK4248: неразрешенная лексема TypeRef (0100004C) для "pg_conn"; образ нельзя запустить DocClient.obj"
Ошибки:
"Ошибка 2 error LNK2028: ссылка на неразрешенную лексему (0A000069) "extern "C" struct pg_conn * __clrcall PQconnectdb(char const *)" (?PQconnectdb@@$$J0YMPAUpg_conn@@PBD@Z) в функции "public: __clrcall ClassSpace::CDB::CDB(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (??0CDB@ClassSpace@@$$FQAM@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@00@Z) DocClient.obj"
"Ошибка 3 error LNK2019: ссылка на неразрешенный внешний символ "extern "C" struct pg_conn * __clrcall PQconnectdb(char const *)" (?PQconnectdb@@$$J0YMPAUpg_conn@@PBD@Z) в функции "public: __clrcall ClassSpace::CDB::CDB(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (??0CDB@ClassSpace@@$$FQAM@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@00@Z) DocClient.obj"
Подскажите, пожалуйста, может, я забыл что-то добавить в проект или что-то указать? И вообще, как заставить это работать? Буду очень признателен
PostgreSQL & Visual C++ (VS 2008)
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Каких-то библиотек не хватает в проекте. Надо включить в проект те недостающие lib-файлы, в которых реализованы эти функции или классы.
DLL-модуль не является библиотекой импорта, у библиотеки импорта расширение .lib, как и у статических библиотек.Указал в Свойства проекта->Компоновщик->Библиотека импорта "C:\Program Files\PostgreSQL\8.2\bin\libpq.dll"
Поумнеть несложно, куда труднее от дури избавиться.
Указал вместо libpq.dll C:\Program Files\PostgreSQL\8.2\lib\ms\pqlib.lib
Всё равно та же ошибка. Пробовал вместо /clr:pure указать /clr:oldSyntax именно эта ошибка исчезает, но появляется куча других (оно и понятно, приложение же писалось для CLR с поддержкой чистого MSIL). Может быть, я неправильно подключил библиотеку?
Всё равно та же ошибка. Пробовал вместо /clr:pure указать /clr:oldSyntax именно эта ошибка исчезает, но появляется куча других (оно и понятно, приложение же писалось для CLR с поддержкой чистого MSIL). Может быть, я неправильно подключил библиотеку?
CLR-модули не так подключаются.
Их нужно через Add Reference... подключать.
А с чего ты взял что СУБД сделана под CRL? Это в документации по PostgreSQL так написано?
Их нужно через Add Reference... подключать.
А с чего ты взял что СУБД сделана под CRL? Это в документации по PostgreSQL так написано?
Поумнеть несложно, куда труднее от дури избавиться.
Это скорее всего и не CLR-модули. Просто я заметил это когда пробовал изменять настройки. Хотя, читал про эти ошибки линкования, и там написано, что проблема в принятых соглашениях. И пример возникновения ошибки именно про CLR и файл MSIL. Самое интересное, что при том же коде всё прекрасно работает в 2003 VS. По этому я и думаю, что проблема либо в неправильном подключении библиотеки, либо в настройках...
А зачем вообще напрямую через какие-то библиотеки импорта коннектиться к СУБД, если можно это сделать стандартным способом через ODBC или OLE DB. PostgreSQL при инсталляции добавляет соответствующие драйвера для доступа к базе из среды Visual C++. С помощью визарда просто укажи в списке драйверов именно тот, который соответствует данной СУБД.
Через ODBC и OLE DB будет медленно работать. К тому же, в конечном приложении надо будет каждый раз на каждой машине настраивать приёмник, что противоречит техническому заданию. Может у кого есть знакомые, которые реально напрямую сами обращались к БД? Просто очень нужно именно так...
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Всё, сделал, получилось! ))
Для тех, кому интересно:
1. Подключил libpq.lib
Вот так #pragma comment(lib, "C:\\Program Files\\PostgreSQL\\8.2\\lib\\ms\\libpq.lib")
2. Изменил в свойствах проекта Поддержку CLR-среды с /clr:pure на /clr
3. Из каталога bin в каталог с программой скопировал требуемые dll'ки (компилятор сам укажет, какие именно)
Спасибо за участие
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Всё, сделал, получилось! ))
Для тех, кому интересно:
1. Подключил libpq.lib
Вот так #pragma comment(lib, "C:\\Program Files\\PostgreSQL\\8.2\\lib\\ms\\libpq.lib")
2. Изменил в свойствах проекта Поддержку CLR-среды с /clr:pure на /clr
3. Из каталога bin в каталог с программой скопировал требуемые dll'ки (компилятор сам укажет, какие именно)
Спасибо за участие