1 ** This file is adapted from libcurl and not yet fully rewritten for c-ares! **
5 / __| ___ / _` | '__/ _ \/ __|
6 | (_ |___| (_| | | | __/\__ \
7 \___| \__,_|_| \___||___/
12 Installing Binary Packages
13 ==========================
15 Lots of people download binary distributions of c-ares. This document
16 does not describe how to install c-ares using such a binary package.
17 This document describes how to compile, build and install c-ares from
23 If you get your code off a Git repository rather than an official
24 release tarball, see the [GIT-INFO](GIT-INFO) file in the root directory
25 for specific instructions on how to proceed.
27 In particular, if not using CMake you will need to run `./buildconf` (Unix) or
28 `buildconf.bat` (Windows) to generate build files, and for the former
29 you will need a local installation of Autotools. If using CMake the steps are
30 the same for both Git and official release tarballs.
35 ### General Information, works on most Unix Platforms (Linux, FreeBSD, etc)
37 A normal Unix installation is made in three or four steps (after you've
38 unpacked the source archive):
42 make ahost adig acountry (optional)
45 You probably need to be root when doing the last command.
47 If you have checked out the sources from the git repository, read the
48 [GIT-INFO](GIT_INFO) on how to proceed.
50 Get a full listing of all available configure options by invoking it like:
54 If you want to install c-ares in a different file hierarchy than /usr/local,
55 you need to specify that already when running configure:
57 ./configure --prefix=/path/to/c-ares/tree
59 If you happen to have write permission in that directory, you can do `make
60 install` without being root. An example of this would be to make a local
61 install in your own home directory:
63 ./configure --prefix=$HOME
69 To force configure to use the standard cc compiler if both cc and gcc are
70 present, run configure like
76 To force a static library compile, disable the shared library creation
77 by running configure like:
79 ./configure --disable-shared
81 If you're a c-ares developer and use gcc, you might want to enable more
82 debug options with the `--enable-debug` option.
86 Some versions of uClibc require configuring with `CPPFLAGS=-D_GNU_SOURCE=1`
87 to get correct large file support.
89 The Open Watcom C compiler on Linux requires configuring with the variables:
91 ./configure CC=owcc AR="$WATCOM/binl/wlib" AR_FLAGS=-q \
92 RANLIB=/bin/true STRIP="$WATCOM/binl/wstrip" CFLAGS=-Wextra
97 (This section was graciously brought to us by Jim Duey, with additions by
100 Download and unpack the c-ares package.
102 `cd` to the new directory. (e.g. `cd c-ares-1.7.6`)
104 Set environment variables to point to the cross-compile toolchain and call
105 configure with any options you need. Be sure and specify the `--host` and
106 `--build` parameters at configuration time. The following script is an
107 example of cross-compiling for the IBM 405GP PowerPC processor using the
108 toolchain from MonteVista for Hardhat Linux.
113 export PATH=$PATH:/opt/hardhat/devkit/ppc/405/bin
114 export CPPFLAGS="-I/opt/hardhat/devkit/ppc/405/target/usr/include"
118 export RANLIB=ppc_405-ranlib
119 export CC=ppc_405-gcc
122 ./configure --target=powerpc-hardhat-linux \
123 --host=powerpc-hardhat-linux \
124 --build=i586-pc-linux-gnu \
125 --prefix=/opt/hardhat/devkit/ppc/405/target/usr/local \
126 --exec-prefix=/usr/local
129 You may also need to provide a parameter like `--with-random=/dev/urandom`
130 to configure as it cannot detect the presence of a random number
131 generating device for a target system. The `--prefix` parameter
132 specifies where c-ares will be installed. If `configure` completes
133 successfully, do `make` and `make install` as usual.
135 In some cases, you may be able to simplify the above commands to as
138 ./configure --host=ARCH-OS
143 Almost identical to the unix installation. Run the configure script in the
144 c-ares root with `sh configure`. Make sure you have the sh executable in
145 `/bin/` or you'll see the configure fail toward the end.
152 (This section was graciously brought to us by David Bentham)
154 As QNX is targeted for resource constrained environments, the QNX headers
155 set conservative limits. This includes the `FD_SETSIZE` macro, set by default
156 to 32. Socket descriptors returned within the c-ares library may exceed this,
157 resulting in memory faults/SIGSEGV crashes when passed into `select(..)`
158 calls using `fd_set` macros.
160 A good all-round solution to this is to override the default when building
161 c-ares, by overriding `CFLAGS` during configure, example:
163 # configure CFLAGS='-DFD_SETSIZE=64 -g -O2'
168 The library can be cross-compiled using gccsdk as follows:
170 CC=riscos-gcc AR=riscos-ar RANLIB='riscos-ar -s' ./configure \
171 --host=arm-riscos-aof --without-random --disable-shared
174 where `riscos-gcc` and `riscos-ar` are links to the gccsdk tools.
175 You can then link your program with `c-ares/lib/.libs/libcares.a`.
180 Method using a configure cross-compile (tested with Android NDK r7b):
182 - prepare the toolchain of the Android NDK for standalone use; this can
183 be done by invoking the script:
185 ./tools/make-standalone-toolchain.sh
187 which creates a usual cross-compile toolchain. Lets assume that you put
188 this toolchain below `/opt` then invoke configure with something
192 export PATH=/opt/arm-linux-androideabi-4.4.3/bin:$PATH
193 ./configure --host=arm-linux-androideabi [more configure options]
196 - if you want to compile directly from our GIT repo you might run into
197 this issue with older automake stuff:
200 checking host system type...
201 Invalid configuration `arm-linux-androideabi':
202 system `androideabi' not recognized
203 configure: error: /bin/sh ./config.sub arm-linux-androideabi failed
205 this issue can be fixed with using more recent versions of `config.sub`
206 and `config.guess` which can be obtained here:
207 http://git.savannah.gnu.org/gitweb/?p=config.git;a=tree
208 you need to replace your system-own versions which usually can be
209 found in your automake folder:
210 `find /usr -name config.sub`
216 Current releases of c-ares introduce a CMake v3+ build system that has been
217 tested on most platforms including Windows, Linux, FreeBSD, MacOS, AIX and
220 In the most basic form, building with CMake might look like:
223 cd /path/to/cmake/source
226 cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/cares ..
234 Options to CMake are passed on the command line using "-D${OPTION}=${VALUE}".
235 The values defined are all boolean and take values like On, Off, True, False.
237 * CARES_STATIC - Build the static library (off by default)
238 * CARES_SHARED - Build the shared library (on by default)
239 * CARES_INSTALL - Hook in installation, useful to disable if chain building
240 * CARES_STATIC_PIC - Build the static library as position-independent (off by
247 Ninja is the next-generation build system meant for generators like CMake that
248 heavily parallize builds. Its use is very similar to the normal build:
251 cd /path/to/cmake/source
254 cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/cares -G "Ninja" ..
259 Windows MSVC Command Line
260 -------------------------
263 cd \path\to\cmake\source
266 cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=C:\cares -G "NMake Makefiles" ..
271 Windows MinGW-w64 Command Line via MSYS
272 ---------------------------------------
274 cd \path\to\cmake\source
277 cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=C:\cares -G "MSYS Makefiles" ..
283 Platform-specific build systems
284 ===============================
289 ### Building Windows DLLs and C run-time (CRT) linkage issues
291 As a general rule, building a DLL with static CRT linkage is highly
292 discouraged, and intermixing CRTs in the same app is something to
295 Reading and comprehension of Microsoft Knowledge Base articles
296 KB94248 and KB140584 is a must for any Windows developer. Especially
297 important is full understanding if you are not going to follow the
300 - [KB94248](http://support.microsoft.com/kb/94248/en-us) - How To Use the C Run-Time
302 - [KB140584](http://support.microsoft.com/kb/140584/en-us) - How to link with the correct C Run-Time (CRT) library
304 - [KB190799](http://msdn.microsoft.com/en-us/library/ms235460) - Potential Errors Passing CRT Objects Across DLL Boundaries
306 If your app is misbehaving in some strange way, or it is suffering
307 from memory corruption, before asking for further help, please try
308 first to rebuild every single library your app uses as well as your
309 app using the debug multithreaded dynamic C runtime.
314 Make sure that MinGW32's bin dir is in the search path, for example:
316 set PATH=c:\mingw32\bin;%PATH%
318 then run 'make -f Makefile.m32' in the root dir.
323 If you use MSVC 6 it is required that you use the February 2003 edition PSDK:
324 http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
327 ### MSVC from command line
329 Run the `vcvars32.bat` file to get a proper environment. The
330 `vcvars32.bat` file is part of the Microsoft development environment and
331 you may find it in `C:\Program Files\Microsoft Visual Studio\vc98\bin`
332 provided that you installed Visual C/C++ 6 in the default directory.
334 Further details in [README.msvc](README.msvc)
337 ### Important static c-ares usage note
339 When building an application that uses the static c-ares library, you must
340 add `-DCARES_STATICLIB` to your `CFLAGS`. Otherwise the linker will look for
341 dynamic import symbols.
347 Building under OS/2 is not much different from building under unix.
359 If during the linking you get an error about `_errno` being an undefined
360 symbol referenced from the text segment, you need to add `-D__ST_MT_ERRNO__`
363 If you're getting huge binaries, probably your makefiles have the `-g` in
370 To compile `libcares.a` / `libcares.lib` you need:
372 - either any gcc / nlmconv, or CodeWarrior 7 PDK 4 or later.
373 - gnu make and awk running on the platform you compile on;
374 native Win32 versions can be downloaded from:
375 http://www.gknw.net/development/prgtools/
376 - recent Novell LibC SDK available from:
377 http://developer.novell.com/ndk/libc.htm
378 - or recent Novell CLib SDK available from:
379 http://developer.novell.com/ndk/clib.htm
381 Set a search path to your compiler, linker and tools; on Linux make
382 sure that the var `OSTYPE` contains the string 'linux'; set the var
383 `NDKBASE` to point to the base of your Novell NDK; and then type
384 `make -f Makefile.netware` from the top source directory;
390 This is a probably incomplete list of known hardware and operating systems
391 that c-ares has been compiled for. If you know a system c-ares compiles and
392 runs on, that isn't listed, please let us know!
394 - Alpha Tru64 v5.0 5.1
395 - ARM Android 1.5, 2.1, 2.3
397 - Power AIX 3.2.5, 4.2, 4.3.1, 4.3.2, 5.1, 5.2
398 - i386 Linux 1.3, 2.0, 2.2, 2.3, 2.4, 2.6
399 - i386 Novell NetWare
400 - i386 Windows 95, 98, ME, NT, 2000, XP, 2003
407 - c-ares: https://c-ares.haxx.se/
408 - MingW: http://www.mingw.org/
409 - MinGW-w64: http://mingw-w64.sourceforge.net/
410 - OpenWatcom: http://www.openwatcom.org/