ERROR: could not load library "...": Exec format error

Started by Boszormenyi Zoltanalmost 16 years ago4 messages
#1Boszormenyi Zoltan
zb@cybertec.at

Hi,

I have the $SUBJECT problem loading my own
module in PostgreSQL. The server is HP-UX/ia64,
PostgeSQL 8.4.2 was compiled with HP CC.
pl/PgSQL can be loaded fine.

...:/usr/local/pgsql/pgsql-cc-8.4/lib# ldd odbclink.so
libodbc.so.1 => /usr/local/pgsql/runtime/lib/libodbc.so.1
libpthread.so.1 => /usr/lib/hpux64/libpthread.so.1
libc.so.1 => /usr/lib/hpux64/libc.so.1
libdl.so.1 => /usr/lib/hpux64/libdl.so.1

"/usr/local/pgsql/runtime" is a link to "/usr/local/pgsql/pgsql-cc-8.4"

...:/usr/local/pgsql/pgsql-cc-8.4/lib# file plpgsql.so odbclink.so
plpgsql.so: ELF-64 shared object file - IA64
odbclink.so: ELF-64 shared object file - IA64

The module compilation was done using "USE_PGXS=1 gmake".

How can I solve this issue?

Thanks in advance,
Zolt�n B�sz�rm�nyi

--
Bible has answers for everything. Proof:
"But let your communication be, Yea, yea; Nay, nay: for whatsoever is more
than these cometh of evil." (Matthew 5:37) - basics of digital technology.
"May your kingdom come" - superficial description of plate tectonics

----------------------------------
Zolt�n B�sz�rm�nyi
Cybertec Sch�nig & Sch�nig GmbH
http://www.postgresql.at/

#2Korry Douglas
korry.douglas@enterprisedb.com
In reply to: Boszormenyi Zoltan (#1)
Re: ERROR: could not load library "...": Exec format error

I have the $SUBJECT problem loading my own
module in PostgreSQL. The server is HP-UX/ia64,
PostgeSQL 8.4.2 was compiled with HP CC.
pl/PgSQL can be loaded fine.

...:/usr/local/pgsql/pgsql-cc-8.4/lib# ldd odbclink.so
libodbc.so.1 => /usr/local/pgsql/runtime/lib/libodbc.so.1
libpthread.so.1 => /usr/lib/hpux64/libpthread.so.1
libc.so.1 => /usr/lib/hpux64/libc.so.1
libdl.so.1 => /usr/lib/hpux64/libdl.so.1

"/usr/local/pgsql/runtime" is a link to "/usr/local/pgsql/pgsql-
cc-8.4"

...:/usr/local/pgsql/pgsql-cc-8.4/lib# file plpgsql.so odbclink.so
plpgsql.so: ELF-64 shared object file - IA64
odbclink.so: ELF-64 shared object file - IA64

The module compilation was done using "USE_PGXS=1 gmake".

How can I solve this issue?

IIRC, HP/UX doesn't like to dynamic-load shared libraries that use
thread-local storage. Your shared library (odbclink.so) is linked
against libpthread.so.1 so you may be running into that problem. I
would recommend running the HP/UX equivalent of strace to capture more
information about the call to dlopen() (or perhaps shl_load(),
depending on which version of HP/UX you are using).

-- Korry

-----------------------------------------------------------------------
Korry Douglas
Senior Database Dude
EnterpriseDB Corporation
The Enterprise Postgres Company

Phone: (804)241-4301
Mobile: (620) EDB-NERD

#3Boszormenyi Zoltan
zb@cybertec.at
In reply to: Korry Douglas (#2)
Re: ERROR: could not load library "...": Exec format error

Korry Douglas �rta:

I have the $SUBJECT problem loading my own
module in PostgreSQL. The server is HP-UX/ia64,
PostgeSQL 8.4.2 was compiled with HP CC.
pl/PgSQL can be loaded fine.

...:/usr/local/pgsql/pgsql-cc-8.4/lib# ldd odbclink.so
libodbc.so.1 => /usr/local/pgsql/runtime/lib/libodbc.so.1
libpthread.so.1 => /usr/lib/hpux64/libpthread.so.1
libc.so.1 => /usr/lib/hpux64/libc.so.1
libdl.so.1 => /usr/lib/hpux64/libdl.so.1

"/usr/local/pgsql/runtime" is a link to "/usr/local/pgsql/pgsql-cc-8.4"

...:/usr/local/pgsql/pgsql-cc-8.4/lib# file plpgsql.so odbclink.so
plpgsql.so: ELF-64 shared object file - IA64
odbclink.so: ELF-64 shared object file - IA64

The module compilation was done using "USE_PGXS=1 gmake".

How can I solve this issue?

IIRC, HP/UX doesn't like to dynamic-load shared libraries that use
thread-local storage. Your shared library (odbclink.so) is linked
against libpthread.so.1 so you may be running into that problem. I
would recommend running the HP/UX equivalent of strace to capture more
information about the call to dlopen() (or perhaps shl_load(),
depending on which version of HP/UX you are using).

Yes, it seems you are right, I have read dlopen(3) in full on HP-UX,
this small detail is documented there. It seems I need to preload
the libraries: odbclink.so, libodbc.so.1 and all the needed libs from
the target ODBC driver... Thanks for the info.

Best regards,
Zolt�n B�sz�rm�nyi

-- Korry

-----------------------------------------------------------------------
Korry Douglas
Senior Database Dude
EnterpriseDB Corporation
The Enterprise Postgres Company

Phone: (804)241-4301
Mobile: (620) EDB-NERD

--
Bible has answers for everything. Proof:
"But let your communication be, Yea, yea; Nay, nay: for whatsoever is more
than these cometh of evil." (Matthew 5:37) - basics of digital technology.
"May your kingdom come" - superficial description of plate tectonics

----------------------------------
Zolt�n B�sz�rm�nyi
Cybertec Sch�nig & Sch�nig GmbH
http://www.postgresql.at/

#4Boszormenyi Zoltan
zb@cybertec.at
In reply to: Boszormenyi Zoltan (#3)
Re: ERROR: could not load library "...": Exec format error

Boszormenyi Zoltan �rta:

Korry Douglas �rta:

I have the $SUBJECT problem loading my own
module in PostgreSQL. The server is HP-UX/ia64,
PostgeSQL 8.4.2 was compiled with HP CC.
pl/PgSQL can be loaded fine.

...:/usr/local/pgsql/pgsql-cc-8.4/lib# ldd odbclink.so
libodbc.so.1 => /usr/local/pgsql/runtime/lib/libodbc.so.1
libpthread.so.1 => /usr/lib/hpux64/libpthread.so.1
libc.so.1 => /usr/lib/hpux64/libc.so.1
libdl.so.1 => /usr/lib/hpux64/libdl.so.1

"/usr/local/pgsql/runtime" is a link to "/usr/local/pgsql/pgsql-cc-8.4"

...:/usr/local/pgsql/pgsql-cc-8.4/lib# file plpgsql.so odbclink.so
plpgsql.so: ELF-64 shared object file - IA64
odbclink.so: ELF-64 shared object file - IA64

The module compilation was done using "USE_PGXS=1 gmake".

How can I solve this issue?

IIRC, HP/UX doesn't like to dynamic-load shared libraries that use
thread-local storage. Your shared library (odbclink.so) is linked
against libpthread.so.1 so you may be running into that problem. I
would recommend running the HP/UX equivalent of strace to capture more
information about the call to dlopen() (or perhaps shl_load(),
depending on which version of HP/UX you are using).

Yes, it seems you are right, I have read dlopen(3) in full on HP-UX,
this small detail is documented there. It seems I need to preload
the libraries: odbclink.so, libodbc.so.1 and all the needed libs from
the target ODBC driver... Thanks for the info.

Actually, I experimented with a "threaded" PostgreSQL server,
I added LDFLAGS="-lpthreads" to the PG configure options
and suddenly my module that's linked to libraries also linked
with libpthread.so started working. The dlopen(3) man page
doesn't say this as a working constellation.

Best regards,
Zolt�n B�sz�rm�nyi

--
Bible has answers for everything. Proof:
"But let your communication be, Yea, yea; Nay, nay: for whatsoever is more
than these cometh of evil." (Matthew 5:37) - basics of digital technology.
"May your kingdom come" - superficial description of plate tectonics

----------------------------------
Zolt�n B�sz�rm�nyi
Cybertec Sch�nig & Sch�nig GmbH
http://www.postgresql.at/