relocation R_X86_64_32 against `.rodata' can not be used when making a shared object

Started by Mimikoalmost 12 years ago3 messagesgeneral
Jump to latest
#1Mimiko
vbvbrj@gmail.com

Hello.

I want to compile postgresql with this:

./configure --prefix=/opt/postgresql --enable-nls --disable-rpath
--enable-profiling --enable-depend --with-tcl --with-segsize=4
--with-perl --with-python --with-gssapi --with-krb5 --with-pam
--with-ldap --with-ossp-uuid --with-libxml --with-libxslt --with-openssl
--with-zlib --with-gnu-ld
--with-includes="/opt/openssl/include:/opt/libxml2/include:/opt/libxslt/include:/opt/zlib/include:/opt/xz/include"
LDFLAGS="-Wl,-R,ORIGIN/../lib/../lib/../lib../lib:ORIGIN/../lib/x86_64-linux-gnu
-L/opt/openssl/lib -L/opt/libxml2/lib -L/opt/libxslt/lib -L/opt/zlib/lib
-L/opt/xz/lib" LIBS="-llzma -lrt" CPPFLAGS="-I/opt/libxml2/include"

But `make` fails with this error:
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith
-Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute
-Wformat-security -fno-strict-aliasing -fwrapv
-fexcess-precision=standard -pg -DLINUX_PROFILE -pthread -D_REENTRANT
-D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -shared
-Wl,-soname,libpq.so.5 -Wl,--version-script=exports.list -o libpq.so.5.6
fe-auth.o fe-connect.o fe-exec.o fe-misc.o fe-print.o fe-lobj.o
fe-protocol2.o fe-protocol3.o pqexpbuffer.o fe-secure.o libpq-events.o
chklocale.o inet_net_ntop.o noblock.o pgstrcasecmp.o pqsignal.o thread.o
strlcpy.o getpeereid.o ip.o md5.o encnames.o wchar.o -L../../../src/port
-L../../../src/common
-Wl,-R,ORIGIN/../lib/../lib/../lib../lib:ORIGIN/../lib/x86_64-linux-gnu
-L/opt/openssl/lib -L/opt/libxml2/lib -L/opt/libxslt/lib -L/opt/zlib/lib
-L/opt/xz/lib -L/usr/lib -Wl,--as-needed -lssl -lcrypto -lgssapi_krb5
-lcrypt -lldap_r -lpthread
/usr/bin/ld: /opt/openssl/lib/libssl.a(t1_meth.o): relocation
R_X86_64_32 against `.rodata' can not be used when making a shared
object; recompile with -fPIC
/opt/openssl/lib/libssl.a: could not read symbols: Bad value
collect2: error: ld returned 1 exit status
make[3]: *** [libpq.so.5.6] Error 1
make[3]: Leaving directory
`/home/mimiko/src/postgresql/src/interfaces/libpq'
make[2]: *** [all-libpq-recurse] Error 2
make[2]: Leaving directory `/home/mimiko/src/postgresql/src/interfaces'
make[1]: *** [all-interfaces-recurse] Error 2
make[1]: Leaving directory `/home/mimiko/src/postgresql/src'
make: *** [world-src-recurse] Error 2

Want to mention that openssl, zlib, libxml2, libxslt and xz are compiled
in /opt as static only.

How can I resolve this error, or this is a wrong way?

--
Mimiko desu.

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Mimiko (#1)
Re: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object

Mimiko <vbvbrj@gmail.com> writes:

But `make` fails with this error:
/usr/bin/ld: /opt/openssl/lib/libssl.a(t1_meth.o): relocation
R_X86_64_32 against `.rodata' can not be used when making a shared
object; recompile with -fPIC

Want to mention that openssl, zlib, libxml2, libxslt and xz are compiled
in /opt as static only.

You cannot use such libraries with Postgres. They need to be linked with
dynamic shared objects, which means they either need to be DSOs themselves
or at least compiled in a way that would allow them to become part of a
DSO. As the message says, that means you need to have used -fPIC when
building them (though -fpic might work as well depending on platform).

regards, tom lane

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

#3Mimiko
vbvbrj@gmail.com
In reply to: Tom Lane (#2)
Re: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object

On 29.05.2014 17:10, Tom Lane wrote:

As the message says, that means you need to have used -fPIC when
building them (though -fpic might work as well depending on platform).

Thank you for answering.

Searching on net I couldn't understand what to compile with -fPIC. So
those libraries must be compiled with -fPIC. For libxml2 and libxslt I
use --with-pic. Is this sufficient? zlib and openssl does not have such
option. Then which of CFLAGS or CPPFLAGS should I set with -fPIC for them?

You are saying that postgresql will always generate shared libraries? If
I use -fPIC to compile other libraries, will postresql's compile will
include those libraries in its lib directory? ie, making postgresql
self-contained with this libraries?

--
Mimiko desu.

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general