пытаюсь подключиться к postgresql через программу c++

Фон

Я использую Linux... и пытаюсь написать простую небольшую программу на С++, которая подключается к базе данных postgresql.

Я пытаюсь следовать этой статье http://www.tutorialspoint.com/postgresql/postgresql_c_cpp.htm

Проблема

Мне удалось скомпилировать библиотеку... и теперь я вижу, что у меня на компьютере есть следующая папка /usr/local/include/pqxx

Но когда я пытаюсь написать базовый код и скомпилировать его, я получаю следующую ошибку:

devbox2:/var/abus# g++ testdb.cpp -lpqxx -lpq
testdb.cpp:2:22: fatal error: pqxx/pqxx: No such file or directory
 #include <pqxx/pqxx> 
                      ^
compilation terminated.

Исходный код

Вот как выглядит код:

  1 #include <iostream>
  2 #include <pqxx/pqxx>
  3 
  4 using namespace std;
  5 using namespace pqxx;
  6 
  7 int main(int argc, char* argv[])
  8 {
  9    try{
 10       connection C("dbname=testdestination user=testuser password=testpassword \
 11       hostaddr=127.0.0.1 port=5432");
 12       if (C.is_open()) {
 13          cout << "Opened database successfully: " << C.dbname() << endl;
 14       } else {
 15          cout << "Can't open database" << endl;
 16          return 1;
 17       }
 18       C.disconnect ();
 19    }catch (const std::exception &e){
 20       cerr << e.what() << std::endl;
 21       return 1;
 22    }
 23 }

Что я уже пробовал:

Я копался в папке /usr/local/include/pqxx и вижу, что там есть файл с именем pqxx... но у него нет никакого расширения.

Вот фрагмент команды ls -lah для этой папки:

-rw-r--r--    1 root     root         637 Dec  8 21:42 pipeline
-rw-r--r--    1 root     root        7.5K Dec  8 21:42 pipeline.hxx
-rw-r--r--    1 root     root        1.1K Dec  8 21:42 pqxx
-rw-r--r--    1 root     root         728 Dec  8 21:42 prepared_statement
-rw-r--r--    1 root     root        8.2K Dec  8 21:42 prepared_statement.hxx

Я также убедился, что мой PATH включает папку /usr/local/include/pqxx. Вот как выглядит мой PATH:

PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/gcc:/usr/local/include/pqxx:/usr/local/include'

Я не уверен, что еще я должен проверить. Мы ценим любые предложения. Спасибо.


person dot    schedule 09.12.2014    source источник
comment
Изменение PATH ничего не изменит; это используется для поиска программ, а не заголовков. cpp -v должен сообщить вам путь поиска - убедитесь, что он включает /usr/local/include (должен)< /а>. Вы можете попробовать добавить -I/usr/local/include в команду компиляции, чтобы убедиться, что она там выглядит.   -  person Mike Seymour    schedule 09.12.2014


Ответы (1)


Чтобы найти включаемые файлы, вы должны добавить параметр -I, например.

g++ -I/usr/local/include testdb.cpp -lpqxx -lpq

Добавление каталогов в PATH здесь не помогает, PATH предназначено для поиска исполняемых файлов из оболочки.

person Olaf Dietsche    schedule 09.12.2014
comment
Хотя это должно быть в пути поиска по умолчанию; если это поможет, то произошло что-то очень странное. - person Mike Seymour; 09.12.2014
comment
@MikeSeymour, что могло пойти не так? извините, я слишком зеленый для этого типа программирования, чтобы знать... спасибо. - person dot; 09.12.2014
comment
@dot: я понятия не имею, что могло пойти не так. Конфигурация вашего компилятора каким-то образом испорчена, поэтому он не ищет в каталоге, который он следует заглянуть. Но использовать этот хак будет намного проще, чем пытаться его исправить. - person Mike Seymour; 09.12.2014
comment
@MikeSeymour, хорошо, без проблем. Что бы это ни стоило, в руководстве есть комментарии / предложения, чтобы сделать то же самое. Должно быть, я пропустил это раньше: pqxx.org/development/libpqxx. Обратите внимание на комментарии в разделе «Создайте свою программу libpqxx». - person dot; 09.12.2014