1

Recently a project that i am working on requred to add postgresql support to it. Project is written in C(its open sourceJanus gateway).

I follwed these steps to install the postgress and libps-dev.

sudo apt-get install postgresql
sudo apt-get install libpq-dev
$ sudo -u postgres psql postgres
psql (9.3.9)
Type "help" for help.

postgres=# \password postgres

Then in my header(connect.h) file:

#include <postgresql/libpq-fe.h>
#include "debug.h"

/*! \brief Connect to postgresql database
 * If successfull, returns PGconn type
 * If not exits the program
 * @param[in] postgres connection params, ex. username, db, host, etc.
 */
PGconn *connect_to_database(gchar connection_params);

/*! \brief Closes connection to database
 * @param[in] PGconn instance
 */
PGconn *close_connection_to_database(PGconn *pgconn);

And my .c(connect.c) file:

/*! \file    db.c
 * \author   ...
 * \copyright GNU General Public License v3
 * \brief    Event handler notifications (headers)
 * \details  This file contains methods for safely creating databse connection
 * to postgresql and then closing it.
 * 
 * \ingroup db
 * \ref db
 */

#include "./connect.h"

PGconn *connect_to_database(gchar connection_params) {
  JANUS_LOG(LOG_WARN, "TESTINGSSS \n\n\n\n");


  const char test_connect = "testings";

  PGconn *conn = PQconnectdb(test_connect);

  return conn;
}

On make i get:

todns@todnnns-VirtualBox ~/Projects/janus-gateway $ make
make  all-recursive
make[1]: Entering directory '/home/todns/Projects/janus-gateway'
Making all in html
make[2]: Entering directory '/home/todns/Projects/janus-gateway/html'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/todns/Projects/janus-gateway/html'
make[2]: Entering directory '/home/todns/Projects/janus-gateway'
  CCLD     janus
db/janus-connect.o: In function `connect_to_database':
/home/todns/Projects/janus-gateway/db/connect.c:20: undefined reference to `PQconnectdb'
collect2: error: ld returned 1 exit status
Makefile:1195: recipe for target 'janus' failed
make[2]: *** [janus] Error 1
make[2]: Leaving directory '/home/todns/Projects/janus-gateway'
Makefile:1914: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/todns/Projects/janus-gateway'
Makefile:905: recipe for target 'all' failed
make: *** [all] Error 2

The problem is:

db/janus-connect.o: In function `connect_to_database':
    /home/todns/Projects/janus-gateway/db/connect.c:20: undefined

My gut is telling me, that it has something to do with Makefile.am file, but i dont really know what to change there. So the question is: What am i missing in this setup? How can i link postgres-dev library with my C code?

Thanks!

EDIT: Forgot to mention, i am running this on Linux Mint virtual machine( main machine is a macbook pro).

IvRRimUm
  • 1,724
  • 3
  • 21
  • 40
  • Is the Makefile in the same directory as `#include "./connect.h"`? Probably not. Maybe you have to change `#include "./connect.h"` to the correct path. Or, change the `-I` directories. – Fiddling Bits Feb 20 '17 at 16:27
  • @FiddlingBits Both `connect.c` and `connect.h` are in the same directory, called db. – IvRRimUm Feb 20 '17 at 16:29
  • @FiddlingBits How can i change `-I` directories? Where to do it and how? – IvRRimUm Feb 20 '17 at 16:30
  • You might have to modify the Makefile to have something like: `-Ipath/to/` `connect.h` directory. And remove the `./` in `#include "./connect.h"`. – Fiddling Bits Feb 20 '17 at 16:31
  • @FiddlingBits I am using Automake. I dont think i have problem with including connect.h, But rather postgress. Heres is the Makefile: https://github.com/meetecho/janus-gateway/blob/master/Makefile.am – IvRRimUm Feb 20 '17 at 16:32

1 Answers1

2

Figured it out.

Appended -L/.... -psql to AM_CFLAGS Makefile.am

Heres the full line:

AM_CFLAGS += -fstack-protector-all -g -ggdb -fPIC -rdynamic -pthread -L/usr/include/postgresql/libpq -lpq

You can check out janus-gateway Makefile.am to see how my Makefile.am looks without the -psql

IvRRimUm
  • 1,724
  • 3
  • 21
  • 40