Re: Statically linking against libpq

From: Daniel Martini <dmartini(at)uni-hohenheim(dot)de>
To: Matthew Metnetsky <met(at)uberstats(dot)com>
Cc: Pgsql-General <pgsql-general(at)postgresql(dot)org>
Subject: Re: Statically linking against libpq
Date: 2005-01-18 08:27:25
Message-ID: 1106036845.41ecc86d7057b@webmail.uni-hohenheim.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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(at)uberstats(dot)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
>

In response to

Browse pgsql-general by date

  From Date Subject
Next Message PFC 2005-01-18 09:00:03 Re: Users and unique identifyers
Previous Message Laurent Marzullo 2005-01-18 08:17:07 Re: PQexecParams and CURSOR