This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: .s file causing problems when linking


On Tue, Jul 22, 2008 at 7:19 PM, Brian Dessent <brian@dessent.net> wrote:
> Nathan Thern wrote:
>> I'm following the build instructions for generic x86 *nix, going under
>> the assumption that cygwin fits in that category. I believe the
> Cygwin can't change the fact that fundamentally these are different
> operating systems, so for example linking works differently as does the
> way symbols are declared at the assembler level.  Assembly is pretty
> much the antithesis of portability so you can't expect this to work
> without some porting.
I managed to get this part working.

>> That is precisely what I tried to do: create a dll from the same .o's
>> that created the .exe.
>
> But that's not really going to work.  You can't fake it like that.  What
> you're doing is creating another library.
...
> That might get the library to link, but at runtime it does *not* mean
> that prbfish.dll will call the routines in scheme.exe.  Rather,
> prbfish.dll will be created with a hardcoded reference to libfoo.dll and
> will fail to run if libfoo.dll is not present -- this fake library is
> not fake, it is a real library, and it duplicates code in scheme.exe so
> it's probably useless and broken.
I did not know this.

> Please read that link which has examples of how to actually export
> symbols from an .exe and link the dll that imports them.  If you have
> the luxury of linking the .exe first then you can skip all the .def file
> junk because you can simply create an import library for the .exe as a
> side effect of linking it (-Wl,--out-implib) and then use that when
> linking prbfish.dll.  The only reason you'd ever need a .def file in
> this case is if you have a circular dependency where you can't link one
> without the other.
> Brian

That sounds great. However, I can't get it to work:
"gcc -o scheme.exe *.o -Wl,--out-implib,scheme.dll.a" creates a
working scheme.exe, but silently doesn't create scheme.dll.a
and
"gcc -shared -o scheme.exe *.o -Wl,--out-implib,scheme.dll.a" creates
scheme.dll.a and creates a scheme.exe that dies with "-bash:
scheme.exe: Permission denied" upon invocation.

I'm moving forward by just running gcc twice, but what am I missing?

regards,
NT

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]