cURL / Mailing Lists / curl-library / Single Mail

curl-library

Re: Issues building with ZLIB and c-ares, Mingw on Win8 x64

From: Gisle Vanem <gvanem_at_broadpark.no>
Date: Thu, 13 Dec 2012 14:25:47 +0100

"Jesse Nicholson" <ascensionsystems_at_gmail.com> wrote:

> Anyway so I downloaded latest release c-ares, zlib and curl... compiled
> c-ares successfully (although I can only get it to spit out a static lib),

That's the problem.

> zlib compiled without issue, then on to curl. Curl will compile the static
> lib without issue, but as soon as it goes to link together libcurl.dll, I
> get a ton of undefined references to c-ares functions. (note that the
> linker doesn't complain about not finding -lcares) Example:

Then I guess you *don't* have both of these files:

dir g:\MingW32\src\inet\DNS\c-ares\*.a

 3.10.2012 16:21 424.734 libcares.a
 3.10.2012 16:21 58.172 libcares.dll.a

Per the gcc heuristics when given a command like "-lcares" it
will pick "libcares.dll.a" first, then "libcares.a" (if the first
imp-lib isn't found). That's my I prefer to use absolute lib names.

In this case Makefile.m32 should IMHO have stated:
  DLL_LIBS += "$(LIBCARES_PATH)/libcares.dll.a" (absolute form)
and not:
  DLL_LIBS += -L"$(LIBCARES_PATH)" -lcares (obfuscated form)

That's why `_imp__ares_version` is missing (since ld sees a static
lib). Check it by modifying the link command to produce a .map-file:

$(libcurl_dll_LIBRARY): $(libcurl_a_OBJECTS) $(RESOURCE) $(libcurl_dll_DEPENDENCIES)
 @$(call DEL, $@)
 $(CC) -v -Wl,--print-map,--sort-common,--cref $(LDFLAGS) -shared -o $@ \
   -Wl,--output-def,$(@:.dll=.def),--out-implib,$(libcurl_dll_a_LIBRARY) \
   $(libcurl_a_OBJECTS) $(RESOURCE) $(DLL_LIBS) > $(@:.dll=.map)

If you have only libcares.a you will see something like:
  LOAD g:\MingW32\src\inet\DNS\C-ares/libcares.a

If you have both libcares.a and libcares.dll.a you will see something like:
  LOAD g:\MingW32\src\inet\DNS\C-ares/libcares.dll.a

BTW. Why is $(libcurl_dll_DEPENDENCIES) == libcares.a here?

If you reall want to use libcares.a (static lib), add '-DCARES_STATICLIB' to
your CFLAGS. But it would be best to figure out why libcares.dll.a isn't
produced.

--gv
-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette: http://curl.haxx.se/mail/etiquette.html
Received on 2012-12-13