Operating System - HP-UX
1834828 Members
2324 Online
110070 Solutions
New Discussion

Re: Mismatched ABI (not an ELF file)

 
sathis kumar
Frequent Advisor

Mismatched ABI (not an ELF file)

Hi,
Currently we are in the process of upgrading HP-UX version from HP-UX11.11(v1) to HP-UX11.23(v2). As a part of that, we need to move some external shared libraries to the new machine. Apart from the external shared libraries, our application will create some shared libraries by linking the existing external shared libraries. Please note that the extension of the shared libraries in the old m/c is .sl(eg: libXXX.sl).
In the old m/c
If we do file ofsapi.sl
It says ofsapi.sl: PA-RISC1.1 shared library -not stripped
If we do file sld51.sl
It says libsld51.sl: s800 shared library -not stripped


As a requirement in the new m/c, our application should create the shared library name with .so extension(eg:libXXX.so). So we have changed the ld(to create the shared library) command in such a way that the name of the library will be with .so extension and copies all the external libraries to the new m/c. Here we are facing the problem, It is throwing an error saying that

ld: Mismatched ABI (not an ELF file) for -lofsapi -lsld51

If we create a shared library in the new m/c the file type is
libHelloWorldImp.so: ELF-32 shared object file - IA64

Is there anyway to make the two external libraries to ELF-32 shared object file - IA64 so that our application can create shared library of type ELF - 32.

Please let me know in case of any questions.

Best Regards,
Prasad.
3 REPLIES 3
Matti_Kurkela
Honored Contributor

Re: Mismatched ABI (not an ELF file)

Apparently your new machine has not only a new HP-UX version, but also a different CPU architecture. The old one is PA-RISC, the new one is Itanium. This is a big, fundamental change.

"PA-RISC1.1 shared library" means that the library contains 32-bit PA-RISC code. "PA-RISC2.0 shared library" would mean 64-bit PA-RISC code. "s800 shared library" is not quite familiar to me, maybe it's an even older PA-RISC library type?

As far as I know, the only way to convert the two libraries ELF-32 type is to recompile them from source to native Itanium code.

Currently you're trying to link both native Itanium code and legacy 32-bit PA-RISC code together into a single binary. This may not be supported or even possible, and definitely isn't recommended.

MK
MK
Steven E. Protter
Exalted Contributor

Re: Mismatched ABI (not an ELF file)

Shalom,

If you were running HP-UX 11.11, the system was PA-RISC. The library in question is not a PA-RISC library never belonged on the system and almost surely did not work.

Cold install is more reliable and avoids such pitfalls.

SEP
Steven E Protter
Owner of ISN Corporation
http://isnamerica.com
http://hpuxconsulting.com
Sponsor: http://hpux.ws
Twitter: http://twitter.com/hpuxlinux
Founder http://newdatacloud.com
Dennis Handly
Acclaimed Contributor

Re: Mismatched ABI (not an ELF file)

>we need to move some external shared libraries to the new machine.

If you just copy your complete application over to IPF, you can run it under Aries.

If you need performance, you'll need to recompile everything.

>MK: "PA-RISC2.0 shared library" would mean 64-bit PA-RISC code.

No, 2.0 is still 32 bit. "ELF-64 shared object file - PA-RISC 2.0 (LP64)" is 64 bit.

>MK: "s800 shared library" is not quite familiar to me, maybe it's an even older PA-RISC library type?

Yes, this is the unsupported PA 1.0. The last release this was valid was 10.10.

>MK: As far as I know, the only way to convert the two libraries ELF-32 type is to recompile them from source to native Itanium code.

Right.

>SEP: Cold install is more reliable and avoids such pitfalls.

They had to do that to get to IPF.