5 \___|\___/|_| \_\_____|
9 Installing Binary Packages
10 ==========================
12 Lots of people download binary distributions of curl and libcurl. This
13 document does not describe how to install curl or libcurl using such a
14 binary package. This document describes how to compile, build and install
15 curl and libcurl from source code.
20 A normal unix installation is made in three or four steps (after you've
21 unpacked the source archive):
28 You probably need to be root when doing the last command.
30 If you have checked out the sources from the CVS repository, read the
31 CVS-INFO on how to proceed.
33 Get a full listing of all available configure options by invoking it like:
37 If you want to install curl in a different file hierarchy than /usr/local,
38 you need to specify that already when running configure:
40 ./configure --prefix=/path/to/curl/tree
42 If you happen to have write permission in that directory, you can do 'make
43 install' without being root. An example of this would be to make a local
44 install in your own home directory:
46 ./configure --prefix=$HOME
50 The configure script always tries to find a working SSL library unless
51 explicitly told not to. If you have OpenSSL installed in the default search
52 path for your compiler/linker, you don't need to do anything special. If
53 you have OpenSSL installed in /usr/local/ssl, you can run configure like:
55 ./configure --with-ssl
57 If you have OpenSSL installed somewhere else (for example, /opt/OpenSSL,)
58 you can run configure like this:
60 ./configure --with-ssl=/opt/OpenSSL
62 If you insist on forcing a build without SSL support, even though you may
63 have OpenSSL installed in your system, you can run configure like this:
65 ./configure --without-ssl
67 If you have OpenSSL installed, but with the libraries in one place and the
68 header files somewhere else, you have to set the LDFLAGS and CPPFLAGS
69 environment variables prior to running configure. Something like this
72 (with the Bourne shell and its clones):
74 CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" \
77 (with csh, tcsh and their clones):
79 env CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" \
82 If you have shared SSL libs installed in a directory where your run-time
83 linker doesn't find them (which usually causes configure failures), you can
84 provide the -R option to ld on some operating systems to set a hard-coded
85 path to the run-time linker:
87 LDFLAGS=-R/usr/local/ssl/lib ./configure --with-ssl
89 Another option to the previous trick, is to set LD_LIBRARY_PATH or edit the
92 If your SSL library was compiled with rsaref (this was common in the past
93 when used in the United States), you may also need to set:
95 LIBS=-lRSAglue -lrsaref
96 (as suggested by Doug Kaufman)
100 To force configure to use the standard cc compiler if both cc and gcc are
101 present, run configure like
105 env CC=cc ./configure
107 To force a static library compile, disable the shared library creation
108 by running configure like:
110 ./configure --disable-shared
112 To tell the configure script to skip searching for thread-safe functions,
115 ./configure --disable-thread
117 To build curl with kerberos4 support enabled, curl requires the krb4 libs
118 and headers installed. You can then use a set of options to tell
119 configure where those are:
121 --with-krb4-includes[=DIR] Specify location of kerberos4 headers
122 --with-krb4-libs[=DIR] Specify location of kerberos4 libs
123 --with-krb4[=DIR] where to look for Kerberos4
125 In most cases, /usr/athena is the install prefix and then it works with
127 ./configure --with-krb4=/usr/athena
129 If you're a curl developer and use gcc, you might want to enable more
130 debug options with the --enable-debug option.
138 Run the 'mingw32.bat' file to get the proper environment variables set,
139 then run 'make mingw32' in the root dir. Use 'make mingw32-ssl' to build
142 If you have any problems linking libraries or finding header files, be sure
143 to verify that the provided "Makefile.m32" files use the proper paths, and
149 Almost identical to the unix installation. Run the configure script in the
150 curl root with 'sh configure'. Make sure you have the sh executable in
151 /bin/ or you'll see the configure fail towards the end.
158 See the separate INSTALL.devcpp file for details.
160 MSVC from command line
161 ----------------------
163 Run the 'vcvars32.bat' file to get a proper environment. The
164 vcvars32.bat file is part of the Microsoft development environment and
165 you may find it in 'C:\Program Files\Microsoft Visual Studio\vc98\bin'
166 provided that you installed Visual C/C++ 6 in the default directory.
168 Then run 'nmake vc' in curl's root directory.
170 If you want to compile with zlib support, you will need to build
171 zlib (http://www.gzip.org/zlib/) as well. Please read the zlib
172 documentation on how to compile zlib. Define the ZLIB_PATH environment
173 variable to the location of zlib.h and zlib.lib, for example:
175 set ZLIB_PATH=c:\zlib-1.2.1
177 Then run 'nmake vc-zlib' in curl's root directory.
179 If you want to compile with SSL support you need the OpenSSL package.
180 Please read the OpenSSL documentation on how to compile and install
181 the OpenSSL libraries. The build process of OpenSSL generates the
182 libeay32.dll and ssleay32.dll files in the out32dll subdirectory in
183 the OpenSSL home directory. OpenSSL static libraries (libeay32.lib,
184 ssleay32.lib, RSAglue.lib) are created in the out32 subdirectory.
186 Before running nmake define the OPENSSL_PATH environment variable with
187 the root/base directory of OpenSSL, for example:
189 set OPENSSL_PATH=c:\openssl-0.9.7d
191 Then run 'nmake vc-ssl' or 'nmake vc-ssl-dll' in curl's root
192 directory. 'nmake vc-ssl' will create a libcurl static and dynamic
193 libraries in the lib subdirectory, as well as a statically linked
194 version of curl.exe in the src subdirectory. This statically linked
195 version is a standalone executable not requiring any DLL at
196 runtime. This make method requires that you have the static OpenSSL
197 libraries available in OpenSSL's out32 subdirectory.
198 'nmake vc-ssl-dll' creates the libcurl dynamic library and
199 links curl.exe against libcurl and OpenSSL dynamically.
200 This executable requires libcurl.dll and the OpenSSL DLLs
202 Run 'nmake vc-ssl-zlib' to build with both ssl and zlib support.
205 ---------------------
209 Make sure you include the paths to curl/include and openssl/inc32 in
212 eg : -I"c:\Bcc55\include;c:\path_curl\include;c:\path_openssl\inc32"
214 Check to make sure that all of the sources listed in lib/Makefile.b32
215 are present in the /path_to_curl/lib directory. (Check the src
216 directory for missing ones.)
218 Make sure the environment variable "BCCDIR" is set to the install
219 location for the compiler eg : c:\Borland\BCC55
222 make -f /path_to_curl/lib/Makefile-ssl.b32
224 compile simplessl.c with appropriate links
226 c:\curl\docs\examples\> bcc32 -L c:\path_to_curl\lib\libcurl.lib
227 -L c:\borland\bcc55\lib\psdk\ws2_32.lib
228 -L c:\openssl\out32\libeay32.lib
229 -L c:\openssl\out32\ssleay32.lib
236 If you use VC++, Borland or similar compilers. Include all lib source
237 files in a static lib "project" (all .c and .h files that is).
238 (you should name it libcurl or similar)
240 Make the sources in the src/ drawer be a "win32 console application"
241 project. Name it curl.
243 For VC++ 6, there's an included Makefile.vc6 that should be possible
244 to use out-of-the-box.
247 Disabling Specific Protocols in Win32 builds
248 --------------------------------------------
250 The configure utility, unfortunately, is not available for the Windows
251 environment, therefore, you cannot use the various disable-protocol
252 options of the configure utility on this platform.
254 However, you can use the following defines to disable specific
257 HTTP_ONLY disables all protocols except HTTP
258 CURL_DISABLE_FTP disables FTP
259 CURL_DISABLE_LDAP disables LDAP
260 CURL_DISABLE_TELNET disables TELNET
261 CURL_DISABLE_DICT disables DICT
262 CURL_DISABLE_FILE disables FILE
263 CURL_DISABLE_GOPHER disables GOPHER
265 If you want to set any of these defines you have the following
269 - Modify lib/Makefile.vc6
270 - Add defines to Project/Settings/C/C++/General/Preprocessor Definitions
271 in the curllib.dsw/curllib.dsp Visual C++ 6 IDE project.
274 Important static libcurl usage note
275 -----------------------------------
277 When building an application that uses the static libcurl library, you must
278 add '-DCURL_STATICLIB' to your CFLAGS. Otherwise the linker will look for
279 dynamic import symbols.
285 Building under OS/2 is not much different from building under unix.
297 If you want to build with OpenSSL or OpenLDAP support, you'll need to
298 download those libraries, too. Dirk Ohme has done some work to port SSL
299 libraries under OS/2, but it looks like he doesn't care about emx. You'll
300 find his patches on: http://come.to/Dirk_Ohme
302 If during the linking you get an error about _errno being an undefined
303 symbol referenced from the text segment, you need to add -D__ST_MT_ERRNO__
306 If everything seems to work fine but there's no curl.exe, you need to add
307 -Zexe to your linker flags.
309 If you're getting huge binaries, probably your makefiles have the -g in
314 (The VMS section is in whole contributed by the friendly Nico Baggus)
316 Curl seems to work with FTP & HTTP other protocols are not tested. (the
317 perl http/ftp testing server supplied as testing too cannot work on VMS
318 because vms has no concept of fork(). [ I tried to give it a whack, but
321 SSL stuff has not been ported.
323 Telnet has about the same issues as for Win32. When the changes for Win32
324 are clear maybe they'll work for VMS too. The basic problem is that select
325 ONLY works for sockets.
327 Marked instances of fopen/[f]stat that might become a problem, especially
328 for non stream files. In this regard, the files opened for writing will be
329 created stream/lf and will thus be safe. Just keep in mind that non-binary
330 read/wring from/to files will have a records size limit of 32767 bytes
333 Stat to get the size of the files is again only safe for stream files &
334 fixed record files without implied CC.
336 -- My guess is that only allowing access to stream files is the quickest
337 way to get around the most issues. Therefore all files need to to be
338 checked to be sure they will be stream/lf before processing them. This is
339 the easiest way out, I know. The reason for this is that code that needs to
340 report the filesize will become a pain in the ass otherwise.
342 Exit status.... Well we needed something done here,
344 VMS has a structured exist status:
346 |1098|765432109876|5432109876543|210|
347 +----+------------+-------------+---+
348 |Ctrl| Facility | Error code |sev|
349 +----+------------+-------------+---+
351 With the Ctrl-bits an application can tell if part or the whole message has
352 already been printed from the program, DCL doesn't need to print it again.
354 Facility - basically the program ID. A code assigned to the program
355 the name can be fetched from external or internal message libraries
356 Errorcode - the errodes assigned by the application
357 Sev. - severity: Even = error, off = non error
365 This all presents itself with:
366 %<FACILITY>-<SeV>-<Errorname>, <Error message>
368 See also the src/curlmsg.msg file, it has the source for the messages In
369 src/main.c a section is devoted to message status values, the globalvalues
370 create symbols with certain values, referenced from a compiled message
371 file. Have all exit function use a exit status derived from a translation
372 table with the compiled message codes.
374 This was all compiled with:
376 Compaq C V6.2-003 on OpenVMS Alpha V7.1-1H2
378 So far for porting notes as of:
384 (This section was graciously brought to us by David Bentham)
386 As QNX is targeted for resource constrained environments, the QNX headers
387 set conservative limits. This includes the FD_SETSIZE macro, set by default
388 to 32. Socket descriptors returned within the CURL library may exceed this,
389 resulting in memory faults/SIGSEGV crashes when passed into select(..)
390 calls using fd_set macros.
392 A good all-round solution to this is to override the default when building
393 libcurl, by overriding CFLAGS during configure, example
394 # configure CFLAGS='-DFD_SETSIZE=64 -g -O2'
399 The library can be cross-compiled using gccsdk as follows:
401 CC=riscos-gcc AR=riscos-ar RANLIB='riscos-ar -s' ./configure \
402 --host=arm-riscos-aof --without-random --disable-shared
405 where riscos-gcc and riscos-ar are links to the gccsdk tools.
406 You can then link your program with curl/lib/.libs/libcurl.a
411 (This section was graciously brought to us by Diego Casorran)
413 To build cURL/libcurl on AmigaOS just type 'make amiga' ...
415 What you need is: (not tested with others versions)
417 GeekGadgets / gcc 2.95.3 (http://www.geekgadgets.org/)
419 AmiTCP SDK v4.3 (http://www.aminet.net/comm/tcp/AmiTCP-SDK-4.3.lha)
421 Native Developer Kit (http://www.amiga.com/3.9/download/NDK3.9.lha)
423 As no ixemul.library is required you will be able to build it for
424 WarpOS/PowerPC (not tested by me), as well a MorphOS version should be
425 possible with no problems.
427 To enable SSL support, you need a OpenSSL native version (without ixemul),
428 you can find a precompiled package at http://amiga.sourceforge.net/OpenSSL/
434 To compile curl.nlm / libcurl.nlm you need:
435 - either any gcc / nlmconv, or CodeWarrior 7 PDK 4 or later.
436 - gnu make and awk running on the platform you compile on;
437 native Win32 versions can be downloaded from:
438 http://www.gknw.com/development/prgtools/
439 - recent Novell LibC SDK available from:
440 http://developer.novell.com/ndk/libc.htm
441 - optional zlib sources (at the moment only dynamic linking with zlib.imp);
442 sources with NetWare Makefile can be obtained from:
443 http://www.gknw.com/mirror/zlib/
444 - optional OpenSSL sources (version 0.9.8 or later which builds with BSD);
446 Set a search path to your compiler, linker and tools; on Linux make
447 sure that the var OSTYPE contains the string 'linux'; and then type
448 'make netware' from the top source directory; other tagets available
449 are 'netware-ssl', 'netware-ssl-zlib', 'netware-zlib' and 'netware-ares';
450 if you need other combinations you can control the build with the
451 environment variables WITH_SSL, WITH_ZLIB, WITH_ARES and ENABLE_IPV6.
452 I found on some Linux systems (RH9) that OS detection didnt work although
453 a 'set | grep OSTYPE' shows the var present and set; I simply overwrote it
454 with 'OSTYPE=linux-rh9-gnu' and the detection in the Makefile worked...
455 Any help in testing appreciated!
456 Builds automatically created 8 times a day from current CVS are here:
457 http://www.gknw.com/mirror/curl/autobuilds/
458 the status of these builds can be viewed at the autobuild table:
459 http://curl.haxx.se/auto/
465 (This section was graciously brought to us by Jim Duey, with additions by
468 Download and unpack the cURL package. Version should be 7.9.1 or later.
470 'cd' to the new directory. (e.g. cd curl-7.12.3)
472 Set environment variables to point to the cross-compile toolchain and call
473 configure with any options you need. Be sure and specify the '--host' and
474 '--build' parameters at configuration time. The following script is an
475 example of cross-compiling for the IBM 405GP PowerPC processor using the
476 toolchain from MonteVista for Hardhat Linux.
482 export PATH=$PATH:/opt/hardhat/devkit/ppc/405/bin
483 export CPPFLAGS="-I/opt/hardhat/devkit/ppc/405/target/usr/include"
487 export RANLIB=ppc_405-ranlib
488 export CC=ppc_405-gcc
491 ./configure --target=powerpc-hardhat-linux \
492 --host=powerpc-hardhat-linux \
493 --build=i586-pc-linux-gnu \
494 --prefix=/opt/hardhat/devkit/ppc/405/target/usr/local \
495 --exec-prefix=/usr/local
499 You may also need to provide a parameter like '--with-random=/dev/urandom'
500 to configure as it cannot detect the presence of a random number
501 generating device for a target system. The '--prefix' parameter
502 specifies where cURL will be installed. If 'configure' completes
503 successfully, do 'make' and 'make install' as usual.
505 In some cases, you may be able to simplify the above commands to as
508 ./configure --host=ARCH-OS
510 There are a number of configure options that can be used to reduce the
511 size of libcurl for embedded applications where binary size is an
512 important factor. First, be sure to set the CFLAGS environment variable
513 when configuring with any compiler optimization flags to reduce the
514 size of the binary. For gcc, this would mean at minimum:
516 env CFLAGS='-Os' ./configure ...
518 Be sure to specify as many --disable- and --without- flags on the configure
519 command-line as you can to disable all the libcurl features that you
520 know your application is not going to need. Besides specifying the
521 --disable-PROTOCOL flags for all the types of URLs your application
522 will not use, here are some other flags that can reduce the size of the
525 --disable-ares (disables support for the ARES DNS library)
526 --disable-cookies (disables support for HTTP cookies)
527 --disable-crypto-auth (disables HTTP cryptographic authentication)
528 --disable-ipv6 (disables support for IPv6)
529 --disable-verbose (eliminates debugging strings and error code strings)
530 --without-libidn (disables support for the libidn DNS library)
531 --without-ssl (disables support for SSL/TLS)
532 --without-zlib (disables support for on-the-fly decompression)
534 You may find that statically linking libcurl to your application will
535 result in a lower total size.
540 This is a probably incomplete list of known hardware and operating systems
541 that curl has been compiled for. If you know a system curl compiles and
542 runs on, that isn't listed, please let us know!
545 - Alpha Digital UNIX v3.2
546 - Alpha FreeBSD 4.1, 4.5
547 - Alpha Linux 2.2, 2.4
550 - Alpha OpenVMS V7.1-1H2
551 - Alpha Tru64 v5.0 5.1
552 - HP-PA HP-UX 9.X 10.X 11.X
557 - Pocket PC/Win CE 3.0
558 - Power AIX 3.2.5, 4.2, 4.3.1, 4.3.2, 5.1, 5.2
565 - Sparc Solaris 2.4, 2.5, 2.5.1, 2.6, 7, 8, 9, 10
567 - StrongARM (and other ARM) RISC OS 3.1, 4.02
568 - StrongARM/ARM7/ARM9 Linux 2.4, 2.6
569 - StrongARM NetBSD 1.4.1
576 - i386 Linux 1.3, 2.0, 2.2, 2.3, 2.4, 2.6
578 - i386 Novell NetWare
583 - i386 Windows 95, 98, ME, NT, 2000, XP, 2003
585 - i486 ncr-sysv4.3.03 (NCR MP-RAS)
590 - m88k dg-dgux5.4R3.00
592 - XScale/PXA250 Linux 2.4
597 OpenSSL http://www.openssl.org
598 MingW http://www.mingw.org
599 OpenLDAP http://www.openldap.org
600 Zlib http://www.gzip.org/zlib/