[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Tinycc-devel] Creating .so files.

From: bifferos
Subject: Re: [Tinycc-devel] Creating .so files.
Date: Thu, 30 Aug 2007 15:28:05 +0100 (BST)

--- Rob Landley <address@hidden> wrote:

> On Wednesday 29 August 2007 6:12:01 am bifferos wrote:
> > --- Rob Landley <address@hidden> wrote:
> > > On Wednesday 29 August 2007 3:25:04 am bifferos wrote:
> > > > I tried to produce a .so file with:
> > > >
> > > > tcc -shared -r dll.c -o test_dll.so
> > > >
> > > > but when dlopen()ing it I got the error:
> > > >
> > > > ./test_dll.so: only ET_DYN and ET_EXEC can be loaded
> > > >
> > > > Any ideas what I'm doing wrong?
> > >
> > > What version are you using, and what platform are you using it on?
> >
> > I tried 0.9.23 on Slackware Linux 11.0.  I compiled the same source
> > code with gcc -shared and it was loaded by my test program no problem.
> > Then I looked on the list and then discovered the Mercurial repo, so I
> > tried the tip of that, and got the same result.
> >
> > I take it that from your response I am typing the right compilation
> > command?
> Dunno, I'm not very familiar with this area.  (It's been around two years 
> since I needed to use dlopen() on a shared library, it's "pull out the man 
> pages" time and I assume you've already done that...)


> Did you try doing the same thing with gcc?  If it works with gcc and not with 

Yes, it works fine when .so compiled with gcc -shared -fPIC.

> tcc, it's a bug and we need to fix it.  (Comparing the resulting binaries is 
> a good way to figure out what the heck's wrong, too...)

I now know why the .so doesn't load.  It's because it wasn't an .so, but a .o 
file.  you cannot combine -shared and -r options on the command line.  The 
first sets the output format to DLL, the second sets it to OBJ, so you end 
up getting an OBJ file.  I guess tcc could add a warning about combining 
these two options to avoid confusion.  It's also a pity the -r option
seems to be documented differently between the command-line help and 
the manual page!  However, I'm still no closer to creating my .so file.  
I surmised that I would have to do it as a two-step process, unfortunately 
I still get another weird error:

bash-3.1$ tcc -r dllmain.c -o dllmain.o
bash-3.1$ tcc -shared dllmain.o -o dll.so
tcc: file 'AS_NEEDED' not found
/usr/lib/libc.so:3: filename expected
/usr/lib/libc.so:3: unrecognized file type

Want ideas for reducing your carbon footprint? Visit Yahoo! For Good  

reply via email to

[Prev in Thread] Current Thread [Next in Thread]