|
|
|
** This file is adapted from libcurl and not yet fully rewritten for c-ares! **
|
|
|
|
|
|
|
|
___ __ _ _ __ ___ ___
|
|
|
|
/ __| ___ / _` | '__/ _ \/ __|
|
|
|
|
| (_ |___| (_| | | | __/\__ \
|
|
|
|
\___| \__,_|_| \___||___/
|
|
|
|
|
|
|
|
How To Compile
|
|
|
|
|
|
|
|
Installing Binary Packages
|
|
|
|
==========================
|
|
|
|
|
|
|
|
Lots of people download binary distributions of c-ares. This document
|
|
|
|
does not describe how to install c-ares using such a binary package.
|
|
|
|
This document describes how to compile, build and install c-ares from
|
|
|
|
source code.
|
|
|
|
|
|
|
|
Building from git
|
|
|
|
=================
|
|
|
|
|
|
|
|
If you get your code off a git repository, see the GIT-INFO file in the
|
|
|
|
root directory for specific instructions on how to proceed.
|
|
|
|
|
|
|
|
UNIX
|
|
|
|
====
|
|
|
|
A normal unix installation is made in three or four steps (after you've
|
|
|
|
unpacked the source archive):
|
|
|
|
|
|
|
|
./configure
|
|
|
|
make
|
|
|
|
make ahost adig acountry (optional)
|
|
|
|
make install
|
|
|
|
|
|
|
|
You probably need to be root when doing the last command.
|
|
|
|
|
|
|
|
If you have checked out the sources from the git repository, read the
|
|
|
|
GIT-INFO on how to proceed.
|
|
|
|
|
|
|
|
Get a full listing of all available configure options by invoking it like:
|
|
|
|
|
|
|
|
./configure --help
|
|
|
|
|
|
|
|
If you want to install c-ares in a different file hierarchy than /usr/local,
|
|
|
|
you need to specify that already when running configure:
|
|
|
|
|
|
|
|
./configure --prefix=/path/to/c-ares/tree
|
|
|
|
|
|
|
|
If you happen to have write permission in that directory, you can do 'make
|
|
|
|
install' without being root. An example of this would be to make a local
|
|
|
|
install in your own home directory:
|
|
|
|
|
|
|
|
./configure --prefix=$HOME
|
|
|
|
make
|
|
|
|
make install
|
|
|
|
|
|
|
|
MORE OPTIONS
|
|
|
|
------------
|
|
|
|
|
|
|
|
To force configure to use the standard cc compiler if both cc and gcc are
|
|
|
|
present, run configure like
|
|
|
|
|
|
|
|
CC=cc ./configure
|
|
|
|
or
|
|
|
|
env CC=cc ./configure
|
|
|
|
|
|
|
|
To force a static library compile, disable the shared library creation
|
|
|
|
by running configure like:
|
|
|
|
|
|
|
|
./configure --disable-shared
|
|
|
|
|
|
|
|
If you're a c-ares developer and use gcc, you might want to enable more
|
|
|
|
debug options with the --enable-debug option.
|
|
|
|
|
|
|
|
SPECIAL CASES
|
|
|
|
-------------
|
|
|
|
Some versions of uClibc require configuring with CPPFLAGS=-D_GNU_SOURCE=1
|
|
|
|
to get correct large file support.
|
|
|
|
|
|
|
|
The Open Watcom C compiler on Linux requires configuring with the variables:
|
|
|
|
|
|
|
|
./configure CC=owcc AR="$WATCOM/binl/wlib" AR_FLAGS=-q \
|
|
|
|
RANLIB=/bin/true STRIP="$WATCOM/binl/wstrip" CFLAGS=-Wextra
|
|
|
|
|
|
|
|
|
|
|
|
Win32
|
|
|
|
=====
|
|
|
|
|
|
|
|
Building Windows DLLs and C run-time (CRT) linkage issues
|
|
|
|
---------------------------------------------------------
|
|
|
|
|
|
|
|
As a general rule, building a DLL with static CRT linkage is highly
|
|
|
|
discouraged, and intermixing CRTs in the same app is something to
|
|
|
|
avoid at any cost.
|
|
|
|
|
|
|
|
Reading and comprehension of Microsoft Knowledge Base articles
|
|
|
|
KB94248 and KB140584 is a must for any Windows developer. Especially
|
|
|
|
important is full understanding if you are not going to follow the
|
|
|
|
advice given above.
|
|
|
|
|
|
|
|
KB94248 - How To Use the C Run-Time
|
|
|
|
http://support.microsoft.com/kb/94248/en-us
|
|
|
|
|
|
|
|
KB140584 - How to link with the correct C Run-Time (CRT) library
|
|
|
|
http://support.microsoft.com/kb/140584/en-us
|
|
|
|
|
|
|
|
KB190799 - Potential Errors Passing CRT Objects Across DLL Boundaries
|
|
|
|
http://msdn.microsoft.com/en-us/library/ms235460
|
|
|
|
|
|
|
|
If your app is misbehaving in some strange way, or it is suffering
|
|
|
|
from memory corruption, before asking for further help, please try
|
|
|
|
first to rebuild every single library your app uses as well as your
|
|
|
|
app using the debug multithreaded dynamic C runtime.
|
|
|
|
|
|
|
|
MingW32
|
|
|
|
-------
|
|
|
|
|
|
|
|
Make sure that MinGW32's bin dir is in the search path, for example:
|
|
|
|
|
|
|
|
set PATH=c:\mingw32\bin;%PATH%
|
|
|
|
|
|
|
|
then run 'make -f Makefile.m32' in the root dir.
|
|
|
|
|
|
|
|
Cygwin
|
|
|
|
------
|
|
|
|
|
|
|
|
Almost identical to the unix installation. Run the configure script in the
|
|
|
|
c-ares root with 'sh configure'. Make sure you have the sh executable in
|
|
|
|
/bin/ or you'll see the configure fail toward the end.
|
|
|
|
|
|
|
|
Run 'make'
|
|
|
|
|
|
|
|
Dev-Cpp
|
|
|
|
-------
|
|
|
|
|
|
|
|
See the separate INSTALL.devcpp file for details.
|
|
|
|
|
|
|
|
MSVC 6 caveats
|
|
|
|
--------------
|
|
|
|
|
|
|
|
If you use MSVC 6 it is required that you use the February 2003 edition PSDK:
|
|
|
|
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
|
|
|
|
|
|
|
|
MSVC from command line
|
|
|
|
----------------------
|
|
|
|
|
|
|
|
Run the 'vcvars32.bat' file to get a proper environment. The
|
|
|
|
vcvars32.bat file is part of the Microsoft development environment and
|
|
|
|
you may find it in 'C:\Program Files\Microsoft Visual Studio\vc98\bin'
|
|
|
|
provided that you installed Visual C/C++ 6 in the default directory.
|
|
|
|
|
|
|
|
Further details in README.msvc
|
|
|
|
|
|
|
|
MSVC IDES
|
|
|
|
---------
|
|
|
|
|
|
|
|
Details in README.msvc
|
|
|
|
|
|
|
|
Important static c-ares usage note
|
|
|
|
----------------------------------
|
|
|
|
|
|
|
|
When building an application that uses the static c-ares library, you must
|
|
|
|
add '-DCARES_STATICLIB' to your CFLAGS. Otherwise the linker will look for
|
|
|
|
dynamic import symbols.
|
|
|
|
|
|
|
|
|
|
|
|
IBM OS/2
|
|
|
|
========
|
|
|
|
Building under OS/2 is not much different from building under unix.
|
|
|
|
You need:
|
|
|
|
|
|
|
|
- emx 0.9d
|
|
|
|
- GNU make
|
|
|
|
- GNU patch
|
|
|
|
- ksh
|
|
|
|
- GNU bison
|
|
|
|
- GNU file utilities
|
|
|
|
- GNU sed
|
|
|
|
- autoconf 2.13
|
|
|
|
|
|
|
|
If during the linking you get an error about _errno being an undefined
|
|
|
|
symbol referenced from the text segment, you need to add -D__ST_MT_ERRNO__
|
|
|
|
in your definitions.
|
|
|
|
|
|
|
|
If you're getting huge binaries, probably your makefiles have the -g in
|
|
|
|
CFLAGS.
|
|
|
|
|
|
|
|
|
|
|
|
QNX
|
|
|
|
===
|
|
|
|
(This section was graciously brought to us by David Bentham)
|
|
|
|
|
|
|
|
As QNX is targeted for resource constrained environments, the QNX headers
|
|
|
|
set conservative limits. This includes the FD_SETSIZE macro, set by default
|
|
|
|
to 32. Socket descriptors returned within the c-ares library may exceed this,
|
|
|
|
resulting in memory faults/SIGSEGV crashes when passed into select(..)
|
|
|
|
calls using fd_set macros.
|
|
|
|
|
|
|
|
A good all-round solution to this is to override the default when building
|
|
|
|
c-ares, by overriding CFLAGS during configure, example
|
|
|
|
# configure CFLAGS='-DFD_SETSIZE=64 -g -O2'
|
|
|
|
|
|
|
|
|
|
|
|
RISC OS
|
|
|
|
=======
|
|
|
|
The library can be cross-compiled using gccsdk as follows:
|
|
|
|
|
|
|
|
CC=riscos-gcc AR=riscos-ar RANLIB='riscos-ar -s' ./configure \
|
|
|
|
--host=arm-riscos-aof --without-random --disable-shared
|
|
|
|
make
|
|
|
|
|
|
|
|
where riscos-gcc and riscos-ar are links to the gccsdk tools.
|
|
|
|
You can then link your program with c-ares/lib/.libs/libcares.a
|
|
|
|
|
|
|
|
|
|
|
|
NetWare
|
|
|
|
=======
|
|
|
|
To compile libcares.a / libcares.lib you need:
|
|
|
|
- either any gcc / nlmconv, or CodeWarrior 7 PDK 4 or later.
|
|
|
|
- gnu make and awk running on the platform you compile on;
|
|
|
|
native Win32 versions can be downloaded from:
|
|
|
|
http://www.gknw.net/development/prgtools/
|
|
|
|
- recent Novell LibC SDK available from:
|
|
|
|
http://developer.novell.com/ndk/libc.htm
|
|
|
|
- or recent Novell CLib SDK available from:
|
|
|
|
http://developer.novell.com/ndk/clib.htm
|
|
|
|
|
|
|
|
Set a search path to your compiler, linker and tools; on Linux make
|
|
|
|
sure that the var OSTYPE contains the string 'linux'; set the var
|
|
|
|
NDKBASE to point to the base of your Novell NDK; and then type
|
|
|
|
'make -f Makefile.netware' from the top source directory;
|
|
|
|
|
|
|
|
|
|
|
|
Android
|
|
|
|
=======
|
|
|
|
Method using a configure cross-compile (tested with Android NDK r7b):
|
|
|
|
- prepare the toolchain of the Android NDK for standalone use; this can
|
|
|
|
be done by invoking the script:
|
|
|
|
./tools/make-standalone-toolchain.sh
|
|
|
|
which creates a usual cross-compile toolchain. Lets assume that you put
|
|
|
|
this toolchain below /opt then invoke configure with something like:
|
|
|
|
export PATH=/opt/arm-linux-androideabi-4.4.3/bin:$PATH
|
|
|
|
./configure --host=arm-linux-androideabi [more configure options]
|
|
|
|
make
|
|
|
|
- if you want to compile directly from our GIT repo you might run into
|
|
|
|
this issue with older automake stuff:
|
|
|
|
checking host system type...
|
|
|
|
Invalid configuration `arm-linux-androideabi':
|
|
|
|
system `androideabi' not recognized
|
|
|
|
configure: error: /bin/sh ./config.sub arm-linux-androideabi failed
|
|
|
|
this issue can be fixed with using more recent versions of config.sub
|
|
|
|
and config.guess which can be obtained here:
|
|
|
|
http://git.savannah.gnu.org/gitweb/?p=config.git;a=tree
|
|
|
|
you need to replace your system-own versions which usually can be
|
|
|
|
found in your automake folder:
|
|
|
|
find /usr -name config.sub
|
|
|
|
|
|
|
|
|
|
|
|
CROSS COMPILE
|
|
|
|
=============
|
|
|
|
(This section was graciously brought to us by Jim Duey, with additions by
|
|
|
|
Dan Fandrich)
|
|
|
|
|
|
|
|
Download and unpack the c-ares package.
|
|
|
|
|
|
|
|
'cd' to the new directory. (e.g. cd c-ares-1.7.6)
|
|
|
|
|
|
|
|
Set environment variables to point to the cross-compile toolchain and call
|
|
|
|
configure with any options you need. Be sure and specify the '--host' and
|
|
|
|
'--build' parameters at configuration time. The following script is an
|
|
|
|
example of cross-compiling for the IBM 405GP PowerPC processor using the
|
|
|
|
toolchain from MonteVista for Hardhat Linux.
|
|
|
|
|
|
|
|
(begin script)
|
|
|
|
|
|
|
|
#! /bin/sh
|
|
|
|
|
|
|
|
export PATH=$PATH:/opt/hardhat/devkit/ppc/405/bin
|
|
|
|
export CPPFLAGS="-I/opt/hardhat/devkit/ppc/405/target/usr/include"
|
|
|
|
export AR=ppc_405-ar
|
|
|
|
export AS=ppc_405-as
|
|
|
|
export LD=ppc_405-ld
|
|
|
|
export RANLIB=ppc_405-ranlib
|
|
|
|
export CC=ppc_405-gcc
|
|
|
|
export NM=ppc_405-nm
|
|
|
|
|
|
|
|
./configure --target=powerpc-hardhat-linux \
|
|
|
|
--host=powerpc-hardhat-linux \
|
|
|
|
--build=i586-pc-linux-gnu \
|
|
|
|
--prefix=/opt/hardhat/devkit/ppc/405/target/usr/local \
|
|
|
|
--exec-prefix=/usr/local
|
|
|
|
|
|
|
|
(end script)
|
|
|
|
|
|
|
|
You may also need to provide a parameter like '--with-random=/dev/urandom'
|
|
|
|
to configure as it cannot detect the presence of a random number
|
|
|
|
generating device for a target system. The '--prefix' parameter
|
|
|
|
specifies where c-ares will be installed. If 'configure' completes
|
|
|
|
successfully, do 'make' and 'make install' as usual.
|
|
|
|
|
|
|
|
In some cases, you may be able to simplify the above commands to as
|
|
|
|
little as:
|
|
|
|
|
|
|
|
./configure --host=ARCH-OS
|
|
|
|
|
|
|
|
|
|
|
|
PORTS
|
|
|
|
=====
|
|
|
|
This is a probably incomplete list of known hardware and operating systems
|
|
|
|
that c-ares has been compiled for. If you know a system c-ares compiles and
|
|
|
|
runs on, that isn't listed, please let us know!
|
|
|
|
|
|
|
|
- Alpha Tru64 v5.0 5.1
|
|
|
|
- ARM Android 1.5, 2.1, 2.3
|
|
|
|
- MIPS IRIX 6.2, 6.5
|
|
|
|
- Power AIX 3.2.5, 4.2, 4.3.1, 4.3.2, 5.1, 5.2
|
|
|
|
- i386 Linux 1.3, 2.0, 2.2, 2.3, 2.4, 2.6
|
|
|
|
- i386 Novell NetWare
|
|
|
|
- i386 Windows 95, 98, ME, NT, 2000, XP, 2003
|
|
|
|
- x86_64 Linux
|
|
|
|
|
|
|
|
Useful URLs
|
|
|
|
===========
|
|
|
|
|
|
|
|
c-ares https://c-ares.haxx.se/
|
|
|
|
|
|
|
|
MingW http://www.mingw.org/
|
|
|
|
MinGW-w64 http://mingw-w64.sourceforge.net/
|
|
|
|
OpenWatcom http://www.openwatcom.org/
|