> From: [email protected] (Niels Möller) > Date: Fri, 29 Nov 2013 14:02:05 +0100 > Cc: Nettle Crypto Library <[email protected]> > > Alexey Pavlov <[email protected]> writes: > > > 2013/11/29 Niels Möller <[email protected]>: > >> What failed? Can I repost your message to the list? > > > > I do it already. I receive subscribing message now. > > Ok. I'm now cc:ing the list. Context: Link error when building a dynamic > libnettle.dll and libhogweed.dll, and statically linking to libgmp.a.
AFAIK, this cannot possibly work on Windows. A DLL cannot depend on a static library. And if the linker is clever enough to copy the entire libgmp into the DLL, you will have trouble while linking programs against such a DLL, like the trouble we see here. > >> So you're building shared libraries for nettle, but you have a static > >> gmp library? The way I understand the error, the used gmp functions gets > >> copied into libhogweed.dll. Not sure if that is the best behavior. No, the symbols from libgmp are copied into the libhogweed _import_ library libhogweed.dll.a. The import library is a static library. > 1. The symbol __gmp_sub_n is defined in some object file included in > libgmp.a, and nowhere in the nettle source or object code (and > mini-gmp.c doesn't count, it's not involved in the link, and it uses > different linker symbol names than the real gmp). > > 2. This object file gets copied from libgmp.a into libhogweed.dll by the > linker. Not sure if this is right; -lgmp was added to the libhogweed > link command primarily to get dependencies between *shared* libraries > right. > > 3. You then link the executable ecc-mod-test.exe with -lhogweed and > -lgmp. The linked sees two definitions of the symbol __gmpn_sub_n, > one in libgmp.a, and one in libhogweed.dll, and it considers this an > error. > > What I don't understand, is why, in (3) above, the linker doesn't just > ignore the object in libgmp.a which defines the symbol. It could be because the module sub_n.o, which is taken from libgmp.a, is needed to satisfy other externals, and that module brings with it a second definition of __gmpn_sub_n. But anyway, I think this is unworkable on Windows. If Alexey doesn't want dependencies on shared libraries, he needs to build static libraries from libhogweed and libnettle (I think --disable-shared at configure time will achieve that effect). _______________________________________________ nettle-bugs mailing list [email protected] http://lists.lysator.liu.se/mailman/listinfo/nettle-bugs
