Pgexodus handbuilding instructions: Difference between revisions

From NEOSYS Dev Wiki
Jump to navigationJump to search
(New page: Note that all routines are marked for "C linkage" in order to work with the postgres library "pq". For convenience they are all compiled under C++ since callexodus requires boost which is...)
 
No edit summary
 
Line 1: Line 1:
Note that all routines are marked for "C linkage" in order to work with the postgres library "pq". For convenience they are all compiled under C++ since callexodus requires boost which is c++. The .c routines could equally well be compiled with the plain c compiler. The link stage must be done in c++ style in order to link to the c++ runtime library "rt".
Note that all routines are marked for "C linkage" in order to work with the postgres library "pq". For convenience they are all compiled under C++ since callexodus requires boost which is c++. The .c routines could equally well be compiled with the plain c compiler. The link stage must be done in c++ style in order to link to the c++ runtime library "rt".


Line 40: Line 39:
         /lib/libgcc_s.so.1
         /lib/libgcc_s.so.1
</pre>
</pre>
Copy the library to the postgres library folder
sudo cp pgexodus.so `pg_config --pkglibdir`
and restart postgres if this isnt the first time you are installing pgexodus
sudo /etc/init.d/postgresql restart
or
sudo /etc/init.d/postgresql-8.3 restart

Latest revision as of 12:34, 10 July 2009

Note that all routines are marked for "C linkage" in order to work with the postgres library "pq". For convenience they are all compiled under C++ since callexodus requires boost which is c++. The .c routines could equally well be compiled with the plain c compiler. The link stage must be done in c++ style in order to link to the c++ runtime library "rt".

cd ~/exodus/trunk/exodus/pgexodus/src
g++ -fpic -c *.c *.cpp -I`pg_config --includedir` -I`pg_config --includedir-server`
g++ -shared -o pgexodus.so *.o -lrt -lpq

Check the build as follows:

ld pgexodus.so

Should give something like the following. These 8 references to the postgres library all seem to be resolved at runtime.

pgexodus.so: undefined reference to `Float8GetDatum'
pgexodus.so: undefined reference to `pg_atoi'
pgexodus.so: undefined reference to `CurrentMemoryContext'
pgexodus.so: undefined reference to `pg_detoast_datum'
pgexodus.so: undefined reference to `pfree'
pgexodus.so: undefined reference to `elog_start'
pgexodus.so: undefined reference to `MemoryContextAlloc'
pgexodus.so: undefined reference to `elog_finish'

Also check the following

ldd -u pgexodus.so

Should give something like:

./pgexodus.so: error: symbol lookup error: undefined symbol: CurrentMemoryContext (continued)
undefined symbol: CurrentMemoryContext  (./pgexodus.so)
Unused direct dependencies:

        /lib/librt.so.1
        /usr/lib/libpq.so.5
        /lib/libm.so.6
        /lib/libgcc_s.so.1

Copy the library to the postgres library folder

sudo cp pgexodus.so `pg_config --pkglibdir`

and restart postgres if this isnt the first time you are installing pgexodus

sudo /etc/init.d/postgresql restart
or
sudo /etc/init.d/postgresql-8.3 restart