Thread: Postgres installed but my C programs won't compile
I had no trouble installing Postgres 6.4 on my RedHat 5.1 Linux machine. However, the C programs I had previously written to access the SQL database were not returning the correct values. I tried to make some changes and re-compile the program but got the following error when I tried to run the re-compiled program: [reina ~/c_programs]$ cc process_kinematics.c -o PROCESS_KINEMATICS $SQL matrix_tools.c gcvspl.o -lm [reina ~/c_programs]$ PROCESS_KINEMATICS PROCESS_KINEMATICS: error in loading shared libraries libpq.so.2.0: cannot open shared object file: No such file or directory It looks as though SQL can't find my shared libraries for Postgres anymore. Does anybody know why? I tried copying my 6.3.2 version back into the proper directories and the program will compile and re-run correctly. Anyone know what to do? Thanks. -Tony
"G. Anthony Reina" wrote: >I had no trouble installing Postgres 6.4 on my RedHat 5.1 Linux machine. >However, the C programs I had previously written to access the SQL >database were not returning the correct values. I tried to make some >changes and re-compile the program but got the following error when I >tried to run the re-compiled program: > >[reina ~/c_programs]$ cc process_kinematics.c -o PROCESS_KINEMATICS $SQL >matrix_tools.c gcvspl.o -lm >[reina ~/c_programs]$ PROCESS_KINEMATICS >PROCESS_KINEMATICS: error in loading shared libraries >libpq.so.2.0: cannot open shared object file: No such file or directory > >It looks as though SQL can't find my shared libraries for Postgres >anymore. Does anybody know why? > >I tried copying my 6.3.2 version back into the proper directories and >the program will compile and re-run correctly. The library version number changed at 6.4. If your 6.3.2 was from an rpm and you have compiled this one for yourself, it is possible that the libraries have ended up in different places. On Debian, packages put libraries in /usr/lib, for example, whereas, by default, PostgreSQL install puts them in /usr/local/lib. Try adding -l/usr/local/lib to the compile line. -- Oliver Elphick Oliver.Elphick@lfix.co.uk Isle of Wight http://www.lfix.co.uk/oliver PGP key from public servers; key ID 32B8FAA1 ======================================== "If my people, which are called by my name, shall humble themselves, and pray, and seek my face, and turn from their wicked ways; then will I hear from heaven, and will forgive their sin, and will heal their land." II Chronicles 7:14
"G. Anthony Reina" <reina@nsi.edu> writes: > I had no trouble installing Postgres 6.4 on my RedHat 5.1 Linux machine. > However, the C programs I had previously written to access the SQL > database were not returning the correct values. I tried to make some > changes and re-compile the program but got the following error when I > tried to run the re-compiled program: > libpq.so.2.0: cannot open shared object file: No such file or directory > It looks as though SQL can't find my shared libraries for Postgres > anymore. Does anybody know why? You may need to re-run ldconfig, or something like that, to get the system to know where that library is. This is pretty OS-dependent, but there is some generic advice in the INSTALL instructions. (BTW, if you find you can extend or improve on the INSTALL advice, please send in better text...) Things to check to try to debug this: 1. Does psql fire up for you, or does it fail with the same error? 2. You might try examining your executable with ldd to see if its shared library dependency info looks reasonable. (Assuming that psql works, compare the output for psql.) If all else fails, you can link libpq.a statically into your program with an appropriate link-time switch (-Bstatic, I think, on Linux). But it's better to get the sharedlib support working. regards, tom lane