Обсуждение: Using libpq without LD_LIBRARY_PATH

Поиск
Список
Период
Сортировка

Using libpq without LD_LIBRARY_PATH

От
Matthew Hagerty
Дата:
Greetings,

I am trying to get a simple C program to compile and run without having to
define the LD_LIBRARY_PATH environment variable.  First I tried this:

gcc -o test -I/usr/local/pgsql/include -L/usr/local/pgsql/lib -lpq test.c

With LD_LIBRARY_PATH defined the program runs fine, without LD_LIBRARY_PATH
defined I get this error:

ld.so failed: Can't find shared library "libpq.so.2.0"

So, I changed my compiler like to this:

gcc -o test -I/usr/local/pgsql/include test.c /usr/local/pgsql/lib/libpq.a

This produced a linker error like this:

fe-auth.o: Undefined symbol `_crypt' referenced from text segment
*** Error code 1

So, I added -lcrypt to the whole mess, like this:

gcc -o test -I/usr/local/pgsql/include -lcrypt test.c
/usr/local/pgsql/lib/libpq.a

Then I get the following warning:

ld: symbol __GLOBAL_OFFSET_TABLE_ remains undefined

Where does all this stop?  Can I static link with libpq?  If so, how is it
done?  As a last ditch effort I added symbolic links in my /usr/local/lib
directory to libpq.a, libpq.so and libpq.so.2, and compiled like this:

gcc -o test -I/usr/local/pgsql/include -lpq test.c

This compiled okay, but when I run the program I get this warning:

/usr/libexec/ld.so: warning: /usr/local/lib/libpq.so.2: minor version -1
older than expected 0, using it anyway


Any insight would be greatly appreciated.

Thank you,
Matthew Hagerty


Re: [INTERFACES] Using libpq without LD_LIBRARY_PATH

От
Margarita Barvinok
Дата:
I compile and run my C program this way:

gcc -O -o prog2 prog2.c -L/usr/local/postgres/lib
-L/usr/local/postgres/include -lecpg -lpq -lcrypt -lnsl -lsocket
-L/usr/local/kth-krb4-0.9.9/lib -lkrb -ldes -lresolv
-I/usr/local/postgres/include -I/usr/local/postgres/lib

But I know nothing about LD_LIBRARY_PATH environment variable - I just
begin to work with all this stuff.

-Margarita

On Fri, 5 Feb 1999, Matthew Hagerty wrote:

> Greetings,
>
> I am trying to get a simple C program to compile and run without having to
> define the LD_LIBRARY_PATH environment variable.  First I tried this:
>
> gcc -o test -I/usr/local/pgsql/include -L/usr/local/pgsql/lib -lpq test.c
>
> Any insight would be greatly appreciated.
>
> Thank you,
> Matthew Hagerty
>
>
>


Re: [INTERFACES] Using libpq without LD_LIBRARY_PATH

От
Tom Lane
Дата:
Matthew Hagerty <matthew@venux.net> writes:
> I am trying to get a simple C program to compile and run without having to
> define the LD_LIBRARY_PATH environment variable.

On what platform?  Unix shared-library support is so variable across
different systems that it's hard to give any generic advice.

> With LD_LIBRARY_PATH defined the program runs fine, without LD_LIBRARY_PATH
> defined I get this error:
> ld.so failed: Can't find shared library "libpq.so.2.0"

Yup, not surprising.  Your platform might have another way to inform the
dynamic linker where to find shared libraries besides LD_LIBRARY_PATH;
for example, if you have ldconfig then you probably want to add
/usr/local/pgsql/lib to its config file.

> So, I added -lcrypt to the whole mess, like this:
> gcc -o test -I/usr/local/pgsql/include -lcrypt test.c
> /usr/local/pgsql/lib/libpq.a
> Then I get the following warning:
> ld: symbol __GLOBAL_OFFSET_TABLE_ remains undefined

I'd expect that you need to put -lcrypt *after* the reference to
libpq.a, although that error message isn't exactly helpful.

> As a last ditch effort I added symbolic links in my /usr/local/lib
> directory to libpq.a, libpq.so and libpq.so.2, and compiled like this:

> gcc -o test -I/usr/local/pgsql/include -lpq test.c

That'll probably link to the shared-library version of libpq, since
that's usually the default choice on systems that have shared libraries.
Dunno about the weird version-number warning; possibly the linker is
expecting to find "libpq.so.2.0" not "libpq.so.2".

            regards, tom lane

Re: [INTERFACES] Using libpq without LD_LIBRARY_PATH

От
Matthew Hagerty
Дата:
Sorry, I forgot to specify versions, etc.

PostgreSQL-6.4.2
FreeBSD-3.0-Stable
gcc-2.7.2.1

Matthew


At 01:28 PM 2/5/99 -0500, Tom Lane wrote:
>Matthew Hagerty <matthew@venux.net> writes:
>> I am trying to get a simple C program to compile and run without having to
>> define the LD_LIBRARY_PATH environment variable.
>
>On what platform?  Unix shared-library support is so variable across
>different systems that it's hard to give any generic advice.
>
>> With LD_LIBRARY_PATH defined the program runs fine, without LD_LIBRARY_PATH
>> defined I get this error:
>> ld.so failed: Can't find shared library "libpq.so.2.0"
>
>Yup, not surprising.  Your platform might have another way to inform the
>dynamic linker where to find shared libraries besides LD_LIBRARY_PATH;
>for example, if you have ldconfig then you probably want to add
>/usr/local/pgsql/lib to its config file.
>
>> So, I added -lcrypt to the whole mess, like this:
>> gcc -o test -I/usr/local/pgsql/include -lcrypt test.c
>> /usr/local/pgsql/lib/libpq.a
>> Then I get the following warning:
>> ld: symbol __GLOBAL_OFFSET_TABLE_ remains undefined
>
>I'd expect that you need to put -lcrypt *after* the reference to
>libpq.a, although that error message isn't exactly helpful.
>
>> As a last ditch effort I added symbolic links in my /usr/local/lib
>> directory to libpq.a, libpq.so and libpq.so.2, and compiled like this:
>
>> gcc -o test -I/usr/local/pgsql/include -lpq test.c
>
>That'll probably link to the shared-library version of libpq, since
>that's usually the default choice on systems that have shared libraries.
>Dunno about the weird version-number warning; possibly the linker is
>expecting to find "libpq.so.2.0" not "libpq.so.2".
>
>            regards, tom lane


Re: [INTERFACES] Using libpq without LD_LIBRARY_PATH

От
James Thompson
Дата:
On Fri, 5 Feb 1999, Matthew Hagerty wrote:

> Greetings,
>
> I am trying to get a simple C program to compile and run without having to
> define the LD_LIBRARY_PATH environment variable.  First I tried this:
>

Depending on your OS you may have an /etc/ld.so.conf file.
Simply add what you normally put in your LD_LIBRARY_PATH into that file.
Then do a ldconfig -v as root (-v optional but you can see it working) and
the libs will be available without the var set.  This is what I do on my
linux systems and it works well.

On my solaris systems I've stuck with what the set up created before I got
here. A shell script is called by all users logins.  It defines the
LD_LIBRARY_PATH for everyone when they log in.  I have no idea if there is
a better way as this works so I've never bothered to mess with it.

->->->->->->->->->->->->->->->->->->---<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<
James Thompson    138 Cardwell Hall  Manhattan, Ks   66506    785-532-0561
Kansas State University                          Department of Mathematics
->->->->->->->->->->->->->->->->->->---<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<



Re: [INTERFACES] Using libpq without LD_LIBRARY_PATH

От
"Billy G. Allie"
Дата:
James Thompson wrote:
> On Fri, 5 Feb 1999, Matthew Hagerty wrote:
>
> > Greetings,
> >
> > I am trying to get a simple C program to compile and run without having to
> > define the LD_LIBRARY_PATH environment variable.  First I tried this:
> >
>
> Depending on your OS you may have an /etc/ld.so.conf file.
> Simply add what you normally put in your LD_LIBRARY_PATH into that file.
> Then do a ldconfig -v as root (-v optional but you can see it working) and
> the libs will be available without the var set.  This is what I do on my
> linux systems and it works well.
>
> On my solaris systems I've stuck with what the set up created before I got
> here. A shell script is called by all users logins.  It defines the
> LD_LIBRARY_PATH for everyone when they log in.  I have no idea if there is
> a better way as this works so I've never bothered to mess with it.
>
I belive that on Solaris you can define LD_RUN_PATH to the library paths to
search and they will be embedded into the executalble so that LD_LIBRARY_PATH
will not be needed.  I know this is the case with UnixWare.
--
____       | Billy G. Allie    | Domain....: Bill.Allie@mug.org
|  /|      | 7436 Hartwell     | Compuserve: 76337,2061
|-/-|----- | Dearborn, MI 48126| MSN.......: B_G_Allie@email.msn.com
|/  |LLIE  | (313) 582-1540    |



Вложения