Re: dlopen: fatal: relocation error



On Wed, 27 Jun 2007 13:34:10 -0700 shahan.am@xxxxxxxxx wrote:
yes i did compile the .so with -fpic. but didn't work..

this is the exact error message dlerror gives after dlopen fails.

ld.so.1: rexserd: fatal: relocation error: file libmsat.d.so: symbol
_Z11GetLastErrorv: referenced symbol not found

where rexserd is my executable which invoke dlopen

as far as i understand this means it can't find the reference to the
GetLastError function isn't it ?

Yes. Sorry, I misread your initial report.

but the GetLastError function (CError* GetLastError (void)) is defined
in the executable and i even checked its symbols using nm -s rexserd |
grep GetLastError .

[475] | 80912| 40|FUNC |GLOB |0 |.text |
_Z11GetLastErrorv

this is the out put.

I thought you were dlopen()'ing the library containing GetLastError()?
This shows that that function is directly in rexserd. So I'm still
slightly confused.

so what did actually went wrong..

I think this has problem has exceeded my knowledge. Google turns up

<http://docs.sun.com/app/docs/doc/806-0641/6j9vuquit?a=view>
<http://forum.java.sun.com/thread.jspa?threadID=5072281&messageID=9264816>
<http://www.opensolaris.org/jive/thread.jspa?messageID=127598>

So, I would try 'ldd -d libmsat.so' which might give something useful,
and 'LD_NODIRECT=1 rexserd' which might help. It would also be
interesting to see exactly how you link libmsat.so.

Did you try linking against libgcc_s?

-frank
.