Re: Statically linking against libpq - Mailing list pgsql-general

From Daniel Martini
Subject Re: Statically linking against libpq
Date
Msg-id 1106036845.41ecc86d7057b@webmail.uni-hohenheim.de
Whole thread Raw
In response to Re: Statically linking against libpq  (Matthew Metnetsky <met@uberstats.com>)
List pgsql-general
Hi,

Looks to me like you have to add -lkrb5 and -lssl to your compile flags
as well. Perhaps some more others (you can use nm in conjunction with
grep to find which libraries define the missing symbols (On OpenBSD
like so: 'cd /usr/lib && nm -o * | grep krb5_free_context' but that
might differ on Fedora Core 3).

Regards,
Daniel

Citing Matthew Metnetsky <met@uberstats.com>:
> On Mon, 2005-01-17 at 14:10 -0500, Matthew Metnetsky wrote:
> > The library is currently linked against libpq like
> > so `gcc -shared -lpq`.  It compiles and runs great as long as people
> > have libpg installed.  I'm trying to find a way to remove this
> > dependency so I googled around and found that `-shared` needed to be `-
> > static` and to add `-lcrypt` also.  However, the linker is now failing
> > and tossing me lots of "undefined reference" messages to things like
> > "krb5_free_context" (I've attached the full log).
> >
> > I'd appreciate any suggestions on getting a statically linked library
> > against libpq.  I'm currently compiling on a Fedora Core 3 machine with
> > gcc-2.95.3 against the postgresql-libs-7.4.6-1.FC3.2 package.
[snipped]
> /usr/local/gcc-2.95.3/bin/gcc -static -ggdb3 -Wall -Wno-unknown-pragmas
> -DOPT_TYPE=\"debugging\" -DCVAR_DEBUG=1 debug.nix/api_info.o
> debug.nix/commands_meta.o debug.nix/dllapi.o debug.nix/metamod.o
> debug.nix/engine_api.o debug.nix/h_export.o debug.nix/linkent.o
> debug.nix/linkgame.o debug.nix/log_meta.o debug.nix/cmn.o
> debug.nix/cmn_player.o debug.nix/cmn_usermsg.o debug.nix/cmn_events.o
> debug.nix/cmn_team.o debug.nix/osdep.o debug.nix/sdk_util.o
> debug.nix/studioapi.o debug.nix/support_meta.o debug.nix/avl.o -o
> debug.nix/cmn_i386.so -ldl -lm -lpq -lcryptdebug.nix/metamod.o
> (.gnu.linkonce.t.DLOPEN(char const *)+0x21): In function `DLOPEN(char
> const *)':
> /home/mimetnet/Projects/CMN/hlds-plugin/src/osdep.h:133: warning: Using
> 'dlopen' in statically linked applications requires at runtime the
> shared libraries from the glibc version used for linking
> /usr/lib/libpq.a(thread.o)(.text+0x6b): In function `pqGetpwuid':
> /usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/thread.c:113: warning:
> Using 'getpwuid_r' in statically linked applications requires at runtime
> the shared libraries from the glibc version used for linking
> /usr/lib/libpq.a(ip.o)(.text+0x9e): In function `getaddrinfo_all':
> /usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/ip.c:81: warning: Using
> 'getaddrinfo' in statically linked applications requires at runtime the
> shared libraries from the glibc version used for linking
> /usr/lib/crt1.o(.text+0x18): In function `_start':
> : undefined reference to `main'
> /usr/lib/libpq.a(fe-misc.o)(.text+0x8ae): In function `pqSocketCheck':
> /usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-misc.c:973:
> undefined reference to `SSL_pending'
> /usr/lib/libpq.a(fe-secure.o)(.text+0xd9): In function `load_dh_file':
> /usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:575:
> undefined reference to `PEM_read_DHparams'
> /usr/lib/libpq.a(fe-secure.o)(.text+0xef):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:580:
> undefined reference to `DH_size'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x11d):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:586:
> undefined reference to `DH_check'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x15e): In function
> `load_dh_buffer':
> /usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:611:
> undefined reference to `BIO_new_mem_buf'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x186):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:614:
> undefined reference to `PEM_read_bio_DHparams'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x190):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:615:
> undefined reference to `BIO_free'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x1e7): In function `tmp_dh_cb':
> /usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:684:
> undefined reference to `DH_size'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x20e):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:685:
> undefined reference to `DH_generate_parameters'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x362): In function
> `pqsecure_destroy':
> /usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:883:
> undefined reference to `SSL_CTX_free'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x3aa): In function `close_SSL':
> /usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:1003:
> undefined reference to `SSL_shutdown'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x3b8):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:1004:
> undefined reference to `SSL_free'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x3d4):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:1010:
> undefined reference to `X509_free'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x415): In function `SSLerrmessage':
> /usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:1029:
> undefined reference to `ERR_get_error'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x430):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:1032:
> undefined reference to `ERR_reason_error_string'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x4b0): In function
> `pqsecure_write':
> /usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:357:
> undefined reference to `SSL_write'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x4c7):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:358:
> undefined reference to `SSL_get_error'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x67c): In function `pqsecure_read':
> /usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:284:
> undefined reference to `SSL_read'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x690):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:285:
> undefined reference to `SSL_get_error'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x81b): In function
> `pqsecure_open_client':
> /usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:241:
> undefined reference to `SSL_new'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x839):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:241:
> undefined reference to `SSL_set_ex_data'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x861):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:241:
> undefined reference to `SSL_set_fd'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x873):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:896:
> undefined reference to `SSL_connect'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x88b):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:956:
> undefined reference to `SSL_get_peer_certificate'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x8dc):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:966:
> undefined reference to `X509_get_subject_name'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x8f6):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:966:
> undefined reference to `X509_NAME_oneline'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x90b):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:970:
> undefined reference to `X509_get_subject_name'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x92d):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:970:
> undefined reference to `X509_NAME_get_text_by_NID'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x956):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:899:
> undefined reference to `SSL_get_error'
> /usr/lib/libpq.a(fe-secure.o)(.text+0xa27): In function
> `pqsecure_initialize':
> /usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:821:
> undefined reference to `SSL_library_init'
> /usr/lib/libpq.a(fe-secure.o)(.text+0xa2c):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:822:
> undefined reference to `SSL_load_error_strings'
> /usr/lib/libpq.a(fe-secure.o)(.text+0xa31):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:823:
> undefined reference to `TLSv1_method'
> /usr/lib/libpq.a(fe-secure.o)(.text+0xa39):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:823:
> undefined reference to `SSL_CTX_new'
> /usr/lib/libpq.a(fe-secure.o)(.text+0xae7):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:851:
> undefined reference to `SSL_CTX_load_verify_locations'
> /usr/lib/libpq.a(fe-secure.o)(.text+0xb0f):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:860:
> undefined reference to `SSL_CTX_set_verify'
> /usr/lib/libpq.a(fe-secure.o)(.text+0xb25):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:862:
> undefined reference to `SSL_CTX_set_verify_depth'
> /usr/lib/libpq.a(fe-secure.o)(.text+0xb3d):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:865:
> undefined reference to `SSL_CTX_set_tmp_dh_callback'
> /usr/lib/libpq.a(fe-secure.o)(.text+0xb63):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:866:
> undefined reference to `SSL_CTX_ctrl'
> /usr/lib/libpq.a(fe-secure.o)(.text+0xc2c): In function
> `client_cert_cb':
> /usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:710:
> undefined reference to `SSL_get_ex_data'
> /usr/lib/libpq.a(fe-secure.o)(.text+0xd06):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:734:
> undefined reference to `PEM_read_X509'
> /usr/lib/libpq.a(fe-secure.o)(.text+0xdb5):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:768:
> undefined reference to `X509_free'
> /usr/lib/libpq.a(fe-secure.o)(.text+0xdfd):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:752:
> undefined reference to `X509_free'
> /usr/lib/libpq.a(fe-secure.o)(.text+0xeac):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:779:
> undefined reference to `PEM_read_PrivateKey'
> /usr/lib/libpq.a(fe-secure.o)(.text+0xed2):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:791:
> undefined reference to `X509_check_private_key'
> /usr/lib/libpq.a(fe-secure.o)(.text+0xf20):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:796:
> undefined reference to `X509_free'
> /usr/lib/libpq.a(fe-secure.o)(.text+0xf2d):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:797:
> undefined reference to `EVP_PKEY_free'
> /usr/lib/libpq.a(fe-secure.o)(.text+0x10bb):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-secure.c:784:
> undefined reference to `X509_free'
> /usr/lib/libpq.a(fe-auth.o)(.text+0x32): In function `pg_krb5_init':
> /usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-auth.c:291:
> undefined reference to `krb5_init_context'
> /usr/lib/libpq.a(fe-auth.o)(.text+0x52):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-auth.c:300:
> undefined reference to `krb5_cc_default'
> /usr/lib/libpq.a(fe-auth.o)(.text+0x7c):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-auth.c:310:
> undefined reference to `krb5_cc_get_principal'
> /usr/lib/libpq.a(fe-auth.o)(.text+0xa6):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-auth.c:322:
> undefined reference to `krb5_unparse_name'
> /usr/lib/libpq.a(fe-auth.o)(.text+0x102):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-auth.c:294:
> undefined reference to `error_message'
> /usr/lib/libpq.a(fe-auth.o)(.text+0x132):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-auth.c:303:
> undefined reference to `error_message'
> /usr/lib/libpq.a(fe-auth.o)(.text+0x15e):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-auth.c:330:
> undefined reference to `krb5_free_context'
> /usr/lib/libpq.a(fe-auth.o)(.text+0x170):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-auth.c:314:
> undefined reference to `error_message'
> /usr/lib/libpq.a(fe-auth.o)(.text+0x1a6):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-auth.c:329:
> undefined reference to `krb5_cc_close'
> /usr/lib/libpq.a(fe-auth.o)(.text+0x1b0):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-auth.c:325:
> undefined reference to `error_message'
> /usr/lib/libpq.a(fe-auth.o)(.text+0x1e6):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-auth.c:328:
> undefined reference to `krb5_free_principal'
> /usr/lib/libpq.a(fe-auth.o)(.text+0x3a3): In function `fe_sendauth':
> /usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-auth.c:373:
> undefined reference to `krb5_sname_to_principal'
> /usr/lib/libpq.a(fe-auth.o)(.text+0x450):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-auth.c:395:
> undefined reference to `krb5_free_principal'
> /usr/lib/libpq.a(fe-auth.o)(.text+0x477):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-auth.c:377:
> undefined reference to `error_message'
> /usr/lib/libpq.a(fe-auth.o)(.text+0x5b9):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-auth.c:399:
> undefined reference to `krb5_sendauth'
> /usr/lib/libpq.a(fe-auth.o)(.text+0x5da):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-auth.c:424:
> undefined reference to `error_message'
> /usr/lib/libpq.a(fe-auth.o)(.text+0x626):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-auth.c:434:
> undefined reference to `krb5_free_principal'
> /usr/lib/libpq.a(fe-auth.o)(.text+0x6b6):/usr/src/build/498045-
> i386/BUILD/postgresql-7.4.6/src/interfaces/libpq/fe-auth.c:429:
> undefined reference to `krb5_free_error'
> collect2: ld returned 1 exit status
> make: *** [debug.nix/cmn_i386.so] Error 1
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
>                http://archives.postgresql.org
>



pgsql-general by date:

Previous
From: "Laurent Marzullo"
Date:
Subject: Re: PQexecParams and CURSOR
Next
From: PFC
Date:
Subject: Re: Users and unique identifyers