Thread: Re: error while executing a c program with embedded sql
I have a c program called test1.pgc with some sql statements embedded in it. The program was preprocessed, compiled and linked. Now, I have the executable test1. When I run the executable it says, ./test1: error while loading shared libraries: libecpg.so.3: cannot open shared object file: No such file or directory What does it mean by this error message? What should I do to correct this error and run the executable successfully? Your response would be very much appreciated. Thanks and Regards, Radha
<radha.manohar@ndsu.nodak.edu> writes: > ./test1: error while loading shared libraries: libecpg.so.3: cannot open > shared object file: No such file or directory The dynamic linker is failing to find either libecpg.so itself, or one of the shared libraries it depends on (perhaps libpq.so). If you are on a Linux system you probably want to fix your ldconfig configuration so that all these libraries are found automatically. You can run ldd on a particular executable or shared library to see what libraries it references and whether those libraries are getting found in the proper places. Note that it is entirely possible for the program linking stage to succeed but dynamic linking to fail at runtime. For various reasons the search rules are not quite the same in the two contexts ... regards, tom lane
On Sun, 2003-11-09 at 15:06, radha.manohar@ndsu.nodak.edu wrote: > I have a c program called test1.pgc with some sql statements embedded in > it. The program was preprocessed, compiled and linked. Now, I have the > executable test1. > > When I run the executable it says, > > ./test1: error while loading shared libraries: libecpg.so.3: cannot open > shared object file: No such file or directory > > What does it mean by this error message? What should I do to correct this > error and run the executable successfully? Shared libraries are loaded from directories specified to the system by ldconfig. Your shared library, libecpg.so.3, is in a PostgreSQL directory, such as /usr/local/pgsql/lib, which has not been added to the directories known to the loader. If you are able to add that directory with ldconfig, that is the best way to do it, but it requires root privilege. Otherwise you can set the environment variable LD_LIBRARY_PATH, thus: export LD_LIBRARY_PATH=/usr/local/pgsql/lib before you run the program, or you can use LD_PRELOAD: LD_PRELOAD=/usr/local/pgsql/lib/libecpg.so.3 ./test1 -- Oliver Elphick Oliver.Elphick@lfix.co.uk Isle of Wight, UK http://www.lfix.co.uk/oliver GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839 932A 614D 4C34 3E1D 0C1C ======================================== "O death, where is thy sting? O grave, where is thy victory?" 1 Corinthians 15:55
radha.manohar@ndsu.nodak.edu wrote: >I have a c program called test1.pgc with some sql statements embedded in >it. The program was preprocessed, compiled and linked. Now, I have the >executable test1. > >When I run the executable it says, > >./test1: error while loading shared libraries: libecpg.so.3: cannot open >shared object file: No such file or directory > check where the so file is located. $ locate libecpg.so.3 say its /usr/local/pgsql/lib then either add the folder above to /etc/ld.so.conf and run ldconfig as root. or $ export LD_LIBRARY_PATH=/path/to/folder/containing/the/so/file $ ./test1 the above assumes u are on linux. on unix also its similar. > >What does it mean by this error message? What should I do to correct this >error and run the executable successfully? > >Your response would be very much appreciated. > >Thanks and Regards, > >Radha > > > >---------------------------(end of broadcast)--------------------------- >TIP 2: you can get off all lists at once with the unregister command > (send "unregister YourEmailAddressHere" to majordomo@postgresql.org) > >
Thanks a lot. IT WORKED! with your suggestions. Regards, Radha > On Sun, 2003-11-09 at 15:06, radha.manohar@ndsu.nodak.edu wrote: >> I have a c program called test1.pgc with some sql statements embedded >> in it. The program was preprocessed, compiled and linked. Now, I have >> the executable test1. >> >> When I run the executable it says, >> >> ./test1: error while loading shared libraries: libecpg.so.3: cannot >> open shared object file: No such file or directory >> >> What does it mean by this error message? What should I do to correct >> this error and run the executable successfully? > > Shared libraries are loaded from directories specified to the system by > ldconfig. Your shared library, libecpg.so.3, is in a PostgreSQL > directory, such as /usr/local/pgsql/lib, which has not been added to the > directories known to the loader. > > If you are able to add that directory with ldconfig, that is the best > way to do it, but it requires root privilege. > > Otherwise you can set the environment variable LD_LIBRARY_PATH, thus: > > export LD_LIBRARY_PATH=/usr/local/pgsql/lib > > before you run the program, or you can use LD_PRELOAD: > > LD_PRELOAD=/usr/local/pgsql/lib/libecpg.so.3 ./test1 > > -- > Oliver Elphick Oliver.Elphick@lfix.co.uk > Isle of Wight, UK > http://www.lfix.co.uk/oliver GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 > 5839 932A 614D 4C34 3E1D 0C1C > ======================================== > "O death, where is thy sting? O grave, where is > thy victory?" 1 Corinthians 15:55