As part of exploring a Windows to Linux port, I looked into generating Windows DLLs with automake and libtool. After some experimenting, I have almost everything I want in an example library, Foo
:
- Builds static and shared libraries for Linux
- Builds static and shared libraries for Windows
- Windows libraries can depend on Cygwin
- Windows libraries can be entirely independent of Cygwin
Here's how I build for that last case:
$ ./autogen.sh $ CC="cc -mno-cywin" CXX="cc -mno-cygwin" LTCC="cc" ./configure --prefix=/tmp/foo $ make install
This installs everything under /tmp/foo
(where I can easily clean up between test runs).
Why LTCC="cc"
? It turns out that libtool writes a temporary wrapper for the main
and just this temporary wrapper needs the full Cygwin environment. Libtool provides LTCC
for building the wrapper independently of CC
used for everything else. Without the extra setting, everything actually works but produces spurious errors during building. (If you want an explanation of -mno-cygwin
, see the manpage for GCC under Cygwin.)
I posted this under the title Almost there. There is one more detail to work out. Even though the DLL has no Cygwin depedencies, it is still named cygfoo-0-0-0.dll
rather than foo.dll
as expected. Everythings works correctly, but this is annoying. You cannot rename the DLL either as this breaks loading for programs linked against it. When I figure this last bit out, I'll post an update to this entry.
No comments:
Post a Comment