Thread: Statically linking against libpq

Statically linking against libpq

From
Johnny Yan
Date:

Hi,

 

We’re building the postgres odbc driver by ourselves for our customers on Linux. It builds against hence depends on libpq.so. We’re wondering if there is a secret configure flag to statically link against libpq such that the final psqlodbcw.so has less dependencies and in particular doesn’t depend on libpq.so. Also if there is no such config flag yet, are you guys planning to add one? Thank you for your help in advance.

 

Johnny

Re: Statically linking against libpq

From
Heikki Linnakangas
Date:
On 07/06/2016 11:01 PM, Johnny Yan wrote:
> Hi,
>
> We're building the postgres odbc driver by ourselves for our
> customers on Linux. It builds against hence depends on libpq.so.
> We're wondering if there is a secret configure flag to statically
> link against libpq such that the final psqlodbcw.so has less
> dependencies and in particular doesn't depend on libpq.so.

There's no such flag, currently.

One option is to create a temporary installation of libpq, with just the
static library. The linker will use the static library, if it can't find
a shared one. Something along the lines of:

mkdir static-libpq
mkdir static-libpq/lib
ln -s `pg_config --libdir`/libpq.a static-libpq/lib/libpq.a
ln -s `pg_config --includedir` static-libpq/include

./configure --with-libpq=static-libpq ...

Assuming your libpq is built with OpenSSL, though, you'll also need to
pass LDFLAGS="-lssl -lcrypto" to make the configure test pass. The
resulting ODBC driver will still need libssl and libcrypto as shared
libraries, if built that way.

There might be a more straightforward way to do that, with suitable
linked flags, but I don't know how.

> Also if there is no such config flag yet, are you guys planning to
> add one?

No such plans. If you want to write a patch, and it's not too
complicated, I wouldn't mind adding it, thouhg.

- Heikki


Re: Statically linking against libpq

From
Johnny Yan
Date:
Cool. That's all I want to know for now. Thank you Heikki.

Johnny

-----Original Message-----
From: Heikki Linnakangas [mailto:hlinnaka@gmail.com] On Behalf Of Heikki Linnakangas
Sent: Wednesday, July 06, 2016 2:06 PM
To: Johnny Yan <jyan@tableau.com>; pgsql-odbc@postgresql.org
Subject: Re: [ODBC] Statically linking against libpq

On 07/06/2016 11:01 PM, Johnny Yan wrote:
> Hi,
>
> We're building the postgres odbc driver by ourselves for our customers
> on Linux. It builds against hence depends on libpq.so.
> We're wondering if there is a secret configure flag to statically link
> against libpq such that the final psqlodbcw.so has less dependencies
> and in particular doesn't depend on libpq.so.

There's no such flag, currently.

One option is to create a temporary installation of libpq, with just the static library. The linker will use the static
library,if it can't find a shared one. Something along the lines of: 

mkdir static-libpq
mkdir static-libpq/lib
ln -s `pg_config --libdir`/libpq.a static-libpq/lib/libpq.a ln -s `pg_config --includedir` static-libpq/include

./configure --with-libpq=static-libpq ...

Assuming your libpq is built with OpenSSL, though, you'll also need to pass LDFLAGS="-lssl -lcrypto" to make the
configuretest pass. The resulting ODBC driver will still need libssl and libcrypto as shared libraries, if built that
way.

There might be a more straightforward way to do that, with suitable linked flags, but I don't know how.

> Also if there is no such config flag yet, are you guys planning to add
> one?

No such plans. If you want to write a patch, and it's not too complicated, I wouldn't mind adding it, thouhg.

- Heikki