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 If you get your code off a git repository, see the GIT-INFO file in the
21 root directory for specific instructions on how to proceed.
26 A normal Unix installation is made in three or four steps (after you've
27 unpacked the source archive):
34 You probably need to be root when doing the last command.
36 If you have checked out the sources from the git repository, read the
37 GIT-INFO on how to proceed.
39 Get a full listing of all available configure options by invoking it like:
43 If you want to install curl in a different file hierarchy than /usr/local,
44 you need to specify that already when running configure:
46 ./configure --prefix=/path/to/curl/tree
48 If you happen to have write permission in that directory, you can do 'make
49 install' without being root. An example of this would be to make a local
50 install in your own home directory:
52 ./configure --prefix=$HOME
56 The configure script always tries to find a working SSL library unless
57 explicitly told not to. If you have OpenSSL installed in the default search
58 path for your compiler/linker, you don't need to do anything special. If
59 you have OpenSSL installed in /usr/local/ssl, you can run configure like:
61 ./configure --with-ssl
63 If you have OpenSSL installed somewhere else (for example, /opt/OpenSSL)
64 and you have pkg-config installed, set the pkg-config path first, like this:
66 env PKG_CONFIG_PATH=/opt/OpenSSL/lib/pkgconfig ./configure --with-ssl
68 Without pkg-config installed, use this:
70 ./configure --with-ssl=/opt/OpenSSL
72 If you insist on forcing a build without SSL support, even though you may
73 have OpenSSL installed in your system, you can run configure like this:
75 ./configure --without-ssl
77 If you have OpenSSL installed, but with the libraries in one place and the
78 header files somewhere else, you have to set the LDFLAGS and CPPFLAGS
79 environment variables prior to running configure. Something like this
82 (with the Bourne shell and its clones):
84 CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" \
87 (with csh, tcsh and their clones):
89 env CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" \
92 If you have shared SSL libs installed in a directory where your run-time
93 linker doesn't find them (which usually causes configure failures), you can
94 provide the -R option to ld on some operating systems to set a hard-coded
95 path to the run-time linker:
97 env LDFLAGS=-R/usr/local/ssl/lib ./configure --with-ssl
102 To force configure to use the standard cc compiler if both cc and gcc are
103 present, run configure like
107 env CC=cc ./configure
109 To force a static library compile, disable the shared library creation
110 by running configure like:
112 ./configure --disable-shared
114 To tell the configure script to skip searching for thread-safe functions,
117 ./configure --disable-thread
119 If you're a curl developer and use gcc, you might want to enable more
120 debug options with the --enable-debug option.
122 curl can be built to use a whole range of libraries to provide various
123 useful services, and configure will try to auto-detect a decent
124 default. But if you want to alter it, you can select how to deal with
125 each individual library.
127 To build with GnuTLS for SSL/TLS, use both --without-ssl and
130 To build with Cyassl for SSL/TLS, use both --without-ssl and
133 To build with NSS for SSL/TLS, use both --without-ssl and --with-nss.
135 To build with PolarSSL for SSL/TLS, use both --without-ssl and
138 To build with axTLS for SSL/TLS, use both --without-ssl and --with-axtls.
140 To build with GSS-API support, use --with-gssapi and have the MIT Kerberos
141 or Heimdal packages installed.
143 To get support for SCP and SFTP, build with --with-libssh2 and have
144 libssh2 0.16 or later installed.
146 To get Metalink support, build with --with-libmetalink and have the
147 libmetalink packages installed.
152 Some versions of uClibc require configuring with CPPFLAGS=-D_GNU_SOURCE=1
153 to get correct large file support.
155 The Open Watcom C compiler on Linux requires configuring with the variables:
157 ./configure CC=owcc AR="$WATCOM/binl/wlib" AR_FLAGS=-q \
158 RANLIB=/bin/true STRIP="$WATCOM/binl/wstrip" CFLAGS=-Wextra
163 Building Windows DLLs and C run-time (CRT) linkage issues
164 ---------------------------------------------------------
166 As a general rule, building a DLL with static CRT linkage is highly
167 discouraged, and intermixing CRTs in the same app is something to
170 Reading and comprehension of Microsoft Knowledge Base articles
171 KB94248 and KB140584 is a must for any Windows developer. Especially
172 important is full understanding if you are not going to follow the
175 KB94248 - How To Use the C Run-Time
176 http://support.microsoft.com/kb/94248/en-us
178 KB140584 - How to link with the correct C Run-Time (CRT) library
179 http://support.microsoft.com/kb/140584/en-us
181 KB190799 - Potential Errors Passing CRT Objects Across DLL Boundaries
182 http://msdn.microsoft.com/en-us/library/ms235460
184 If your app is misbehaving in some strange way, or it is suffering
185 from memory corruption, before asking for further help, please try
186 first to rebuild every single library your app uses as well as your
187 app using the debug multithreaded dynamic C runtime.
189 If you get linkage errors read section 5.7 of the FAQ document.
194 Make sure that MinGW32's bin dir is in the search path, for example:
196 set PATH=c:\mingw32\bin;%PATH%
198 then run 'mingw32-make mingw32' in the root dir. There are other
199 make targets available to build libcurl with more features, use:
200 'mingw32-make mingw32-zlib' to build with Zlib support;
201 'mingw32-make mingw32-ssl-zlib' to build with SSL and Zlib enabled;
202 'mingw32-make mingw32-ssh2-ssl-zlib' to build with SSH2, SSL, Zlib;
203 'mingw32-make mingw32-ssh2-ssl-sspi-zlib' to build with SSH2, SSL, Zlib
206 If you have any problems linking libraries or finding header files, be sure
207 to verify that the provided "Makefile.m32" files use the proper paths, and
208 adjust as necessary. It is also possible to override these paths with
209 environment variables, for example:
211 set ZLIB_PATH=c:\zlib-1.2.8
212 set OPENSSL_PATH=c:\openssl-0.9.8zc
213 set LIBSSH2_PATH=c:\libssh2-1.4.3
215 ATTENTION: if you want to build with libssh2 support you have to use latest
216 version 0.17 - previous versions will NOT work with 7.17.0 and later!
217 Use 'mingw32-make mingw32-ssh2-ssl-zlib' to build with SSH2 and SSL enabled.
219 It is now also possible to build with other LDAP SDKs than MS LDAP;
220 currently it is possible to build with native Win32 OpenLDAP, or with the
221 Novell CLDAP SDK. If you want to use these you need to set these vars:
223 set LDAP_SDK=c:\openldap
224 set USE_LDAP_OPENLDAP=1
226 or for using the Novell SDK:
228 set USE_LDAP_NOVELL=1
230 If you want to enable LDAPS support then set LDAPS=1.
232 - optional MingW32-built OpenLDAP SDK available from:
233 http://www.gknw.net/mirror/openldap/
234 - optional recent Novell CLDAP SDK available from:
235 http://developer.novell.com/ndk/cldap.htm
240 Almost identical to the unix installation. Run the configure script in the
241 curl root with 'sh configure'. Make sure you have the sh executable in
242 /bin/ or you'll see the configure fail toward the end.
249 See the separate INSTALL.devcpp file for details.
254 If you use MSVC 6 it is required that you use the February 2003 edition of
255 the 'Platform SDK' which can be downloaded from:
257 http://www.microsoft.com/en-us/download/details.aspx?id=12261
259 Building any software with MSVC 6 without having PSDK installed is just
260 asking for trouble down the road once you have released it, you might notice
261 the problems in the first corner or ten miles ahead, depending mostly on your
262 choice of static vs dynamic runtime and third party libraries. Anyone using
263 software built in such way will at some point regret having done so.
265 If the compiler has been updated with the installation of a service pack as
266 those mentioned in http://support.microsoft.com/kb/194022 the compiler can be
267 safely used to read source code, translate and make it object code.
269 But, even with the service packs mentioned above installed, the resulting
270 software generated in such an environment will be using outdated system
271 header files and libraries with bugs and security issues which have already
272 been addressed and fixed long time ago.
274 So, building curl and libcurl with MSVC 6 without PSDK is absolutely
275 discouraged for the benefit of anyone using software built in such
276 environment. And it will not be supported in any way, as we could just
277 be hunting bugs which have already been fixed way back in 2003.
279 When building with MSVC 6 we attempt to detect if PSDK is not being used,
280 and if this is the case the build process will fail hard with an error
281 message stating that the February 2003 PSDK is required. This is done to
282 protect the unsuspecting and avoid PEBKAC issues.
284 Additionally it might happen that a die hard MSVC hacker still wants to
285 build curl and libcurl with MSVC 6 without PSDK installed, even knowing
286 that this is a highly discouraged and unsupported build environment. In
287 this case the brave of heart will be able to build in such an environment
288 with the requisite of defining preprocessor symbol ALLOW_MSVC6_WITHOUT_PSDK
289 in lib/config-win32.h and knowing that LDAP and IPv6 support will be missing.
291 MSVC from command line
292 ----------------------
294 Run the 'vcvars32.bat' file to get a proper environment. The
295 vcvars32.bat file is part of the Microsoft development environment and
296 you may find it in 'C:\Program Files\Microsoft Visual Studio\vc98\bin'
297 provided that you installed Visual C/C++ 6 in the default directory.
299 Then run 'nmake vc' in curl's root directory.
301 If you want to compile with zlib support, you will need to build
302 zlib (http://www.gzip.org/zlib/) as well. Please read the zlib
303 documentation on how to compile zlib. Define the ZLIB_PATH environment
304 variable to the location of zlib.h and zlib.lib, for example:
306 set ZLIB_PATH=c:\zlib-1.2.8
308 Then run 'nmake vc-zlib' in curl's root directory.
310 If you want to compile with SSL support you need the OpenSSL package.
311 Please read the OpenSSL documentation on how to compile and install
312 the OpenSSL libraries. The build process of OpenSSL generates the
313 libeay32.dll and ssleay32.dll files in the out32dll subdirectory in
314 the OpenSSL home directory. OpenSSL static libraries (libeay32.lib,
315 ssleay32.lib, RSAglue.lib) are created in the out32 subdirectory.
317 Before running nmake define the OPENSSL_PATH environment variable with
318 the root/base directory of OpenSSL, for example:
320 set OPENSSL_PATH=c:\openssl-0.9.8zc
322 Then run 'nmake vc-ssl' or 'nmake vc-ssl-dll' in curl's root
323 directory. 'nmake vc-ssl' will create a libcurl static and dynamic
324 libraries in the lib subdirectory, as well as a statically linked
325 version of curl.exe in the src subdirectory. This statically linked
326 version is a standalone executable not requiring any DLL at
327 runtime. This make method requires that you have the static OpenSSL
328 libraries available in OpenSSL's out32 subdirectory.
329 'nmake vc-ssl-dll' creates the libcurl dynamic library and
330 links curl.exe against libcurl and OpenSSL dynamically.
331 This executable requires libcurl.dll and the OpenSSL DLLs
333 Run 'nmake vc-ssl-zlib' to build with both ssl and zlib support.
338 A fairly comprehensive set of Visual Studio project files are available for
339 v6.0 through v12.0 and are located in the projects folder to allow proper
340 building of both the libcurl library as well as the curl tool.
342 For more information about these projects and building via Visual Studio
343 please see the README file located in the projects folder.
348 Ensure that your build environment is properly set up to use the compiler
349 and associated tools. PATH environment variable must include the path to
350 bin subdirectory of your compiler installation, eg: c:\Borland\BCC55\bin
352 It is advisable to set environment variable BCCDIR to the base path of
353 the compiler installation.
355 set BCCDIR=c:\Borland\BCC55
357 In order to build a plain vanilla version of curl and libcurl run the
358 following command from curl's root directory:
362 To build curl and libcurl with zlib and OpenSSL support set environment
363 variables ZLIB_PATH and OPENSSL_PATH to the base subdirectories of the
364 already built zlib and OpenSSL libraries and from curl's root directory
367 make borland-ssl-zlib
369 libcurl library will be built in 'lib' subdirectory while curl tool
370 is built in 'src' subdirectory. In order to use libcurl library it is
371 advisable to modify compiler's configuration file bcc32.cfg located
372 in c:\Borland\BCC55\bin to reflect the location of libraries include
373 paths for example the '-I' line could result in something like:
375 -I"c:\Borland\BCC55\include;c:\curl\include;c:\openssl\inc32"
377 bcc3.cfg '-L' line could also be modified to reflect the location of
378 of libcurl library resulting for example:
380 -L"c:\Borland\BCC55\lib;c:\curl\lib;c:\openssl\out32"
382 In order to build sample program 'simple.c' from the docs\examples
383 subdirectory run following command from mentioned subdirectory:
385 bcc32 simple.c libcurl.lib cw32mt.lib
387 In order to build sample program simplessl.c an SSL enabled libcurl
388 is required, as well as the OpenSSL libeay32.lib and ssleay32.lib
394 If you use VC++, Borland or similar compilers. Include all lib source
395 files in a static lib "project" (all .c and .h files that is).
396 (you should name it libcurl or similar)
398 Make the sources in the src/ drawer be a "win32 console application"
399 project. Name it curl.
401 Disabling Specific Protocols in Win32 builds
402 --------------------------------------------
404 The configure utility, unfortunately, is not available for the Windows
405 environment, therefore, you cannot use the various disable-protocol
406 options of the configure utility on this platform.
408 However, you can use the following defines to disable specific
411 HTTP_ONLY disables all protocols except HTTP
412 CURL_DISABLE_FTP disables FTP
413 CURL_DISABLE_LDAP disables LDAP
414 CURL_DISABLE_TELNET disables TELNET
415 CURL_DISABLE_DICT disables DICT
416 CURL_DISABLE_FILE disables FILE
417 CURL_DISABLE_TFTP disables TFTP
418 CURL_DISABLE_HTTP disables HTTP
419 CURL_DISABLE_IMAP disables IMAP
420 CURL_DISABLE_POP3 disables POP3
421 CURL_DISABLE_SMTP disables SMTP
423 If you want to set any of these defines you have the following options:
425 - Modify lib/config-win32.h
426 - Modify lib/curl_setup.h
427 - Modify lib/Makefile.vc6
428 - Modify the "Preprocessor Definitions" in the libcurl project
430 Note: The pre-processor settings can be found using the Visual Studio IDE
431 under "Project -> Settings -> C/C++ -> General" in VC6 and "Project ->
432 Properties -> Configuration Properties -> C/C++ -> Preprocessor" in later
435 Using BSD-style lwIP instead of Winsock TCP/IP stack in Win32 builds
436 --------------------------------------------------------------------
438 In order to compile libcurl and curl using BSD-style lwIP TCP/IP stack
439 it is necessary to make definition of preprocessor symbol USE_LWIPSOCK
440 visible to libcurl and curl compilation processes. To set this definition
441 you have the following alternatives:
443 - Modify lib/config-win32.h and src/config-win32.h
444 - Modify lib/Makefile.vc6
445 - Modify the "Preprocessor Definitions" in the libcurl project
447 Note: The pre-processor settings can be found using the Visual Studio IDE
448 under "Project -> Settings -> C/C++ -> General" in VC6 and "Project ->
449 Properties -> Configuration Properties -> C/C++ -> Preprocessor" in later
452 Once that libcurl has been built with BSD-style lwIP TCP/IP stack support,
453 in order to use it with your program it is mandatory that your program
454 includes lwIP header file <lwip/opt.h> (or another lwIP header that includes
455 this) before including any libcurl header. Your program does not need the
456 USE_LWIPSOCK preprocessor definition which is for libcurl internals only.
458 Compilation has been verified with lwIP 1.4.0 and contrib-1.4.0 from:
460 http://download.savannah.gnu.org/releases/lwip/lwip-1.4.0.zip
461 http://download.savannah.gnu.org/releases/lwip/contrib-1.4.0.zip
463 This BSD-style lwIP TCP/IP stack support must be considered experimental
464 given that it has been verified that lwIP 1.4.0 still needs some polish,
465 and libcurl might yet need some additional adjustment, caveat emptor.
467 Important static libcurl usage note
468 -----------------------------------
470 When building an application that uses the static libcurl library, you must
471 add '-DCURL_STATICLIB' to your CFLAGS. Otherwise the linker will look for
472 dynamic import symbols.
474 Apple iOS and Mac OS X
475 ======================
477 On recent Apple operating systems, curl can be built to use Apple's
478 SSL/TLS implementation, Secure Transport, instead of OpenSSL. To build with
479 Secure Transport for SSL/TLS, use the configure option --with-darwinssl. (It
480 is not necessary to use the option --without-ssl.) This feature requires iOS
481 5.0 or later, or OS X 10.5 ("Leopard") or later.
483 When Secure Transport is in use, the curl options --cacert and --capath and
484 their libcurl equivalents, will be ignored, because Secure Transport uses
485 the certificates stored in the Keychain to evaluate whether or not to trust
486 the server. This, of course, includes the root certificates that ship with
487 the OS. The --cert and --engine options, and their libcurl equivalents, are
488 currently unimplemented in curl with Secure Transport.
490 For OS X users: In OS X 10.8 ("Mountain Lion"), Apple made a major
491 overhaul to the Secure Transport API that, among other things, added
492 support for the newer TLS 1.1 and 1.2 protocols. To get curl to support
493 TLS 1.1 and 1.2, you must build curl on Mountain Lion or later, or by
494 using the equivalent SDK. If you set the MACOSX_DEPLOYMENT_TARGET
495 environmental variable to an earlier version of OS X prior to building curl,
496 then curl will use the new Secure Transport API on Mountain Lion and later,
497 and fall back on the older API when the same curl binary is executed on
498 older cats. For example, running these commands in curl's directory in the
499 shell will build the code such that it will run on cats as old as OS X 10.6
500 ("Snow Leopard") (using bash):
502 export MACOSX_DEPLOYMENT_TARGET="10.6"
503 ./configure --with-darwinssl
509 Building under OS/2 is not much different from building under unix.
521 If you want to build with OpenSSL or OpenLDAP support, you'll need to
522 download those libraries, too. Dirk Ohme has done some work to port SSL
523 libraries under OS/2, but it looks like he doesn't care about emx. You'll
524 find his patches on: http://come.to/Dirk_Ohme
526 If during the linking you get an error about _errno being an undefined
527 symbol referenced from the text segment, you need to add -D__ST_MT_ERRNO__
530 If everything seems to work fine but there's no curl.exe, you need to add
531 -Zexe to your linker flags.
533 If you're getting huge binaries, probably your makefiles have the -g in
539 (The VMS section is in whole contributed by the friendly Nico Baggus)
541 Curl seems to work with FTP & HTTP other protocols are not tested. (the
542 perl http/ftp testing server supplied as testing too cannot work on VMS
543 because vms has no concept of fork(). [ I tried to give it a whack, but
546 SSL stuff has not been ported.
548 Telnet has about the same issues as for Win32. When the changes for Win32
549 are clear maybe they'll work for VMS too. The basic problem is that select
550 ONLY works for sockets.
552 Marked instances of fopen/[f]stat that might become a problem, especially
553 for non stream files. In this regard, the files opened for writing will be
554 created stream/lf and will thus be safe. Just keep in mind that non-binary
555 read/wring from/to files will have a records size limit of 32767 bytes
558 Stat to get the size of the files is again only safe for stream files &
559 fixed record files without implied CC.
561 -- My guess is that only allowing access to stream files is the quickest
562 way to get around the most issues. Therefore all files need to to be
563 checked to be sure they will be stream/lf before processing them. This is
564 the easiest way out, I know. The reason for this is that code that needs to
565 report the filesize will become a pain in the ass otherwise.
567 Exit status.... Well we needed something done here,
569 VMS has a structured exist status:
571 |1098|765432109876|5432109876543|210|
572 +----+------------+-------------+---+
573 |Ctrl| Facility | Error code |sev|
574 +----+------------+-------------+---+
576 With the Ctrl-bits an application can tell if part or the whole message has
577 already been printed from the program, DCL doesn't need to print it again.
579 Facility - basically the program ID. A code assigned to the program
580 the name can be fetched from external or internal message libraries
581 Error code - the err codes assigned by the application
582 Sev. - severity: Even = error, off = non error
591 This all presents itself with:
592 %<FACILITY>-<Sev>-<Errorname>, <Error message>
594 See also the src/curlmsg.msg file, it has the source for the messages In
595 src/main.c a section is devoted to message status values, the globalvalues
596 create symbols with certain values, referenced from a compiled message
597 file. Have all exit function use a exit status derived from a translation
598 table with the compiled message codes.
600 This was all compiled with:
602 Compaq C V6.2-003 on OpenVMS Alpha V7.1-1H2
604 So far for porting notes as of:
612 (This section was graciously brought to us by David Bentham)
614 As QNX is targeted for resource constrained environments, the QNX headers
615 set conservative limits. This includes the FD_SETSIZE macro, set by default
616 to 32. Socket descriptors returned within the CURL library may exceed this,
617 resulting in memory faults/SIGSEGV crashes when passed into select(..)
618 calls using fd_set macros.
620 A good all-round solution to this is to override the default when building
621 libcurl, by overriding CFLAGS during configure, example
623 # configure CFLAGS='-DFD_SETSIZE=64 -g -O2'
628 The library can be cross-compiled using gccsdk as follows:
630 CC=riscos-gcc AR=riscos-ar RANLIB='riscos-ar -s' ./configure \
631 --host=arm-riscos-aof --without-random --disable-shared
634 where riscos-gcc and riscos-ar are links to the gccsdk tools.
635 You can then link your program with curl/lib/.libs/libcurl.a
640 (This section was graciously brought to us by Diego Casorran)
642 To build cURL/libcurl on AmigaOS just type 'make amiga' ...
644 What you need is: (not tested with others versions)
646 GeekGadgets / gcc 2.95.3 (http://www.geekgadgets.org/)
648 AmiTCP SDK v4.3 (http://www.aminet.net/comm/tcp/AmiTCP-SDK-4.3.lha)
650 Native Developer Kit (http://www.amiga.com/3.9/download/NDK3.9.lha)
652 As no ixemul.library is required you will be able to build it for
653 WarpOS/PowerPC (not tested by me), as well a MorphOS version should be
654 possible with no problems.
656 To enable SSL support, you need a OpenSSL native version (without ixemul),
657 you can find a precompiled package at http://amiga.sourceforge.net/OpenSSL/
662 To compile curl.nlm / libcurl.nlm you need:
664 - either any gcc / nlmconv, or CodeWarrior 7 PDK 4 or later.
665 - gnu make and awk running on the platform you compile on;
666 native Win32 versions can be downloaded from:
667 http://www.gknw.net/development/prgtools/
668 - recent Novell LibC SDK available from:
669 http://developer.novell.com/ndk/libc.htm
670 - or recent Novell CLib SDK available from:
671 http://developer.novell.com/ndk/clib.htm
672 - optional recent Novell CLDAP SDK available from:
673 http://developer.novell.com/ndk/cldap.htm
674 - optional zlib sources (static or dynamic linking with zlib.imp);
675 sources with NetWare Makefile can be obtained from:
676 http://www.gknw.net/mirror/zlib/
677 - optional OpenSSL sources (version 0.9.8 or later build with BSD sockets);
678 you can find precompiled packages at:
679 http://www.gknw.net/development/ossl/netware/
680 for CLIB-based builds OpenSSL 0.9.8h or later is required - earlier versions
681 don't support building with CLIB BSD sockets.
682 - optional SSH2 sources (version 0.17 or later);
684 Set a search path to your compiler, linker and tools; on Linux make
685 sure that the var OSTYPE contains the string 'linux'; set the var
686 NDKBASE to point to the base of your Novell NDK; and then type
687 'make netware' from the top source directory; other targets available
688 are 'netware-ssl', 'netware-ssl-zlib', 'netware-zlib' and 'netware-ares';
689 if you need other combinations you can control the build with the
690 environment variables WITH_SSL, WITH_ZLIB, WITH_ARES, WITH_SSH2, and
691 ENABLE_IPV6; you can set LINK_STATIC=1 to link curl.nlm statically.
692 By default LDAP support is enabled, however currently you will need a patch
693 in order to use the CLDAP NDK with BSD sockets (Novell Bug 300237):
694 http://www.gknw.net/test/curl/cldap_ndk/ldap_ndk.diff
695 I found on some Linux systems (RH9) that OS detection didn't work although
696 a 'set | grep OSTYPE' shows the var present and set; I simply overwrote it
697 with 'OSTYPE=linux-rh9-gnu' and the detection in the Makefile worked...
698 Any help in testing appreciated!
699 Builds automatically created 8 times a day from current git are here:
700 http://www.gknw.net/mirror/curl/autobuilds/
701 the status of these builds can be viewed at the autobuild table:
702 http://curl.haxx.se/dev/builds.html
707 curl does not use the eCos build system, so you must first build eCos
708 separately, then link curl to the resulting eCos library. Here's a sample
709 configure line to do so on an x86 Linux box targeting x86:
711 GCCLIB=`gcc -print-libgcc-file-name` && \
712 CFLAGS="-D__ECOS=1 -nostdinc -I$ECOS_INSTALL/include \
713 -I`dirname $GCCLIB`/include" \
714 LDFLAGS="-nostdlib -Wl,--gc-sections -Wl,-static \
715 -L$ECOS_INSTALL/lib -Ttarget.ld -ltarget" \
716 ./configure --host=i386 --disable-shared \
717 --without-ssl --without-zlib --disable-manual --disable-ldap
719 In most cases, eCos users will be using libcurl from within a custom
720 embedded application. Using the standard 'curl' executable from
721 within eCos means facing the limitation of the standard eCos C
722 startup code which does not allow passing arguments in main(). To
723 run 'curl' from eCos and have it do something useful, you will need
724 to either modify the eCos startup code to pass in some arguments, or
725 modify the curl application itself to retrieve its arguments from
726 some location set by the bootloader or hard-code them.
728 Something like the following patch could be used to hard-code some
729 arguments. The MTAB_ENTRY line mounts a RAM disk as the root filesystem
730 (without mounting some kind of filesystem, eCos errors out all file
731 operations which curl does not take to well). The next section synthesizes
732 some command-line arguments for curl to use, in this case to direct curl
733 to read further arguments from a file. It then creates that file on the
734 RAM disk and places within it a URL to download: a file: URL that
735 just happens to point to the configuration file itself. The results
736 of running curl in this way is the contents of the configuration file
737 printed to the console.
739 --- src/main.c 19 Jul 2006 19:09:56 -0000 1.363
740 +++ src/main.c 24 Jul 2006 21:37:23 -0000
741 @@ -4286,11 +4286,31 @@
746 +#include <cyg/fileio/fileio.h>
747 +MTAB_ENTRY( testfs_mte1,
754 int main(int argc, char *argv[])
757 struct Configurable config;
759 + char *args[] = {"ecos-curl", "-K", "curlconf.txt"};
761 + argc = sizeof(args)/sizeof(args[0]);
764 + f = fopen("curlconf.txt", "w");
766 + fprintf(f, "--url file:curlconf.txt");
770 memset(&config, 0, sizeof(struct Configurable));
772 config.errors = stderr; /* default errors to stderr */
777 curl can be compiled on Minix 3 using gcc or ACK (starting with
778 ver. 3.1.3). Ensure that GNU gawk and bash are both installed and
779 available in the PATH.
783 Increase the heap sizes of the compiler with the command:
787 then configure and compile curl with:
789 ./configure CC=cc LD=cc AR=/usr/bin/aal GREP=grep \
790 CPPFLAGS='-D_POSIX_SOURCE=1 -I/usr/local/include'
792 chmem =256000 src/curl
796 Make sure gcc is in your PATH with the command:
798 export PATH=/usr/gnu/bin:$PATH
800 then configure and compile curl with:
802 ./configure CC=gcc AR=/usr/gnu/bin/gar GREP=grep
804 chmem =256000 src/curl
809 The Symbian OS port uses the Symbian build system to compile. From the
810 packages/Symbian/group/ directory, run:
815 to compile and install curl and libcurl using SBSv1. If your Symbian
816 SDK doesn't include support for P.I.P.S., you will need to contact
817 your SDK vendor to obtain that first.
822 Build for VxWorks is performed using cross compilation.
823 That means you build on Windows machine using VxWorks tools and
824 run the built image on the VxWorks device.
826 To build libcurl for VxWorks you need:
828 - CYGWIN (free, http://cygwin.com/)
829 - Wind River Workbench (commercial)
831 If you have CYGWIN and Workbench installed on you machine
832 follow after next steps:
834 1. Open the Command Prompt window and change directory ('cd')
835 to the libcurl 'lib' folder.
836 2. Add CYGWIN 'bin' folder to the PATH environment variable.
837 For example, type 'set PATH=C:/embedded/cygwin/bin;%PATH%'.
838 3. Adjust environment variables defined in 'Environment' section
839 of the Makefile.vxworks file to point to your software folders.
840 4. Build the libcurl by typing 'make -f ./Makefile.vxworks'
842 As a result the libcurl.a library should be created in the 'lib' folder.
843 To clean the build results type 'make -f ./Makefile.vxworks clean'.
848 Method using the static makefile:
850 - see the build notes in the packages/Android/Android.mk file.
852 Method using a configure cross-compile (tested with Android NDK r7c, r8):
854 - prepare the toolchain of the Android NDK for standalone use; this can
855 be done by invoking the script:
856 ./build/tools/make-standalone-toolchain.sh
857 which creates a usual cross-compile toolchain. Lets assume that you put
858 this toolchain below /opt then invoke configure with something like:
859 export PATH=/opt/arm-linux-androideabi-4.4.3/bin:$PATH
860 ./configure --host=arm-linux-androideabi [more configure options]
862 - if you want to compile directly from our GIT repo you might run into
863 this issue with older automake stuff:
864 checking host system type...
865 Invalid configuration `arm-linux-androideabi':
866 system `androideabi' not recognized
867 configure: error: /bin/sh ./config.sub arm-linux-androideabi failed
868 this issue can be fixed with using more recent versions of config.sub
869 and config.guess which can be obtained here:
870 http://git.savannah.gnu.org/gitweb/?p=config.git;a=tree
871 you need to replace your system-own versions which usually can be
872 found in your automake folder:
873 find /usr -name config.sub
875 Wrapper for pkg-config:
877 - In order to make proper use of pkg-config so that configure is able to
878 find all dependencies you should create a wrapper script for pkg-config;
879 file /opt/arm-linux-androideabi-4.4.3/bin/arm-linux-androideabi-pkg-config:
882 SYSROOT=$(dirname ${0%/*})/sysroot
883 export PKG_CONFIG_DIR=
884 export PKG_CONFIG_LIBDIR=${SYSROOT}/usr/local/lib/pkgconfig:${SYSROOT}/usr/share/pkgconfig
885 export PKG_CONFIG_SYSROOT_DIR=${SYSROOT}
888 also create a copy or symlink with name arm-unknown-linux-androideabi-pkg-config.
893 (This section was graciously brought to us by Jim Duey, with additions by
896 Download and unpack the cURL package.
898 'cd' to the new directory. (e.g. cd curl-7.12.3)
900 Set environment variables to point to the cross-compile toolchain and call
901 configure with any options you need. Be sure and specify the '--host' and
902 '--build' parameters at configuration time. The following script is an
903 example of cross-compiling for the IBM 405GP PowerPC processor using the
904 toolchain from MonteVista for Hardhat Linux.
910 export PATH=$PATH:/opt/hardhat/devkit/ppc/405/bin
911 export CPPFLAGS="-I/opt/hardhat/devkit/ppc/405/target/usr/include"
915 export RANLIB=ppc_405-ranlib
916 export CC=ppc_405-gcc
919 ./configure --target=powerpc-hardhat-linux \
920 --host=powerpc-hardhat-linux \
921 --build=i586-pc-linux-gnu \
922 --prefix=/opt/hardhat/devkit/ppc/405/target/usr/local \
923 --exec-prefix=/usr/local
927 You may also need to provide a parameter like '--with-random=/dev/urandom'
928 to configure as it cannot detect the presence of a random number
929 generating device for a target system. The '--prefix' parameter
930 specifies where cURL will be installed. If 'configure' completes
931 successfully, do 'make' and 'make install' as usual.
933 In some cases, you may be able to simplify the above commands to as
936 ./configure --host=ARCH-OS
941 There are a number of configure options that can be used to reduce the
942 size of libcurl for embedded applications where binary size is an
943 important factor. First, be sure to set the CFLAGS variable when
944 configuring with any relevant compiler optimization flags to reduce the
945 size of the binary. For gcc, this would mean at minimum the -Os option,
946 and potentially the -march=X and -mdynamic-no-pic options as well, e.g.
948 ./configure CFLAGS='-Os' ...
950 Note that newer compilers often produce smaller code than older versions
951 due to improved optimization.
953 Be sure to specify as many --disable- and --without- flags on the configure
954 command-line as you can to disable all the libcurl features that you
955 know your application is not going to need. Besides specifying the
956 --disable-PROTOCOL flags for all the types of URLs your application
957 will not use, here are some other flags that can reduce the size of the
960 --disable-ares (disables support for the C-ARES DNS library)
961 --disable-cookies (disables support for HTTP cookies)
962 --disable-crypto-auth (disables HTTP cryptographic authentication)
963 --disable-ipv6 (disables support for IPv6)
964 --disable-manual (disables support for the built-in documentation)
965 --disable-proxy (disables support for HTTP and SOCKS proxies)
966 --disable-verbose (eliminates debugging strings and error code strings)
967 --enable-hidden-symbols (eliminates unneeded symbols in the shared library)
968 --without-libidn (disables support for the libidn DNS library)
969 --without-librtmp (disables support for RTMP)
970 --without-ssl (disables support for SSL/TLS)
971 --without-zlib (disables support for on-the-fly decompression)
973 The GNU compiler and linker have a number of options that can reduce the
974 size of the libcurl dynamic libraries on some platforms even further.
975 Specify them by providing appropriate CFLAGS and LDFLAGS variables on the
976 configure command-line, e.g.
978 CFLAGS="-Os -ffunction-sections -fdata-sections \
979 -fno-unwind-tables -fno-asynchronous-unwind-tables" \
980 LDFLAGS="-Wl,-s -Wl,-Bsymbolic -Wl,--gc-sections"
982 Be sure also to strip debugging symbols from your binaries after
983 compiling using 'strip' (or the appropriate variant if cross-compiling).
984 If space is really tight, you may be able to remove some unneeded
985 sections of the shared library using the -R option to objcopy (e.g. the
988 Using these techniques it is possible to create a basic HTTP-only shared
989 libcurl library for i386 Linux platforms that is only 114 KiB in size, and
990 an FTP-only library that is 115 KiB in size (as of libcurl version 7.35.0,
993 You may find that statically linking libcurl to your application will
994 result in a lower total size than dynamically linking.
996 Note that the curl test harness can detect the use of some, but not all, of
997 the --disable statements suggested above. Use will cause tests relying on
998 those features to fail. The test harness can be manually forced to skip
999 the relevant tests by specifying certain key words on the runtests.pl
1000 command line. Following is a list of appropriate key words:
1002 --disable-cookies !cookies
1003 --disable-manual !--manual
1004 --disable-proxy !HTTP\ proxy !proxytunnel !SOCKS4 !SOCKS5
1009 This is a probably incomplete list of known hardware and operating systems
1010 that curl has been compiled for. If you know a system curl compiles and
1011 runs on, that isn't listed, please let us know!
1014 - Alpha Digital UNIX v3.2
1015 - Alpha FreeBSD 4.1, 4.5
1016 - Alpha Linux 2.2, 2.4
1017 - Alpha NetBSD 1.5.2
1019 - Alpha OpenVMS V7.1-1H2
1020 - Alpha Tru64 v5.0 5.1
1022 - ARM Android 1.5, 2.1, 2.3, 3.2, 4.x
1027 - HP-PA HP-UX 9.X 10.X 11.X
1030 - MicroBlaze uClinux
1031 - MIPS IRIX 6.2, 6.5
1034 - Pocket PC/Win CE 3.0
1035 - Power AIX 3.2.5, 4.2, 4.3.1, 4.3.2, 5.1, 5.2
1036 - PowerPC Darwin 1.0
1045 - Sparc Solaris 2.4, 2.5, 2.5.1, 2.6, 7, 8, 9, 10
1047 - StrongARM (and other ARM) RISC OS 3.1, 4.02
1048 - StrongARM/ARM7/ARM9 Linux 2.4, 2.6
1049 - StrongARM NetBSD 1.4.1
1050 - Symbian OS (P.I.P.S.) 9.x
1061 - i386 Linux 1.3, 2.0, 2.2, 2.3, 2.4, 2.6
1065 - i386 Novell NetWare
1071 - i386 Windows 95, 98, ME, NT, 2000, XP, 2003
1072 - i486 ncr-sysv4.3.03 (NCR MP-RAS)
1078 - m88k dg-dgux5.4R3.00
1081 - XScale/PXA250 Linux 2.4
1087 axTLS http://axtls.sourceforge.net/
1088 c-ares http://c-ares.haxx.se/
1089 GNU GSS http://www.gnu.org/software/gss/
1090 GnuTLS http://www.gnu.org/software/gnutls/
1091 Heimdal http://www.pdc.kth.se/heimdal/
1092 libidn http://www.gnu.org/software/libidn/
1093 libmetalink https://launchpad.net/libmetalink/
1094 libssh2 http://www.libssh2.org/
1095 MIT Kerberos http://web.mit.edu/kerberos/www/dist/
1096 NSS http://www.mozilla.org/projects/security/pki/nss/
1097 OpenLDAP http://www.openldap.org/
1098 OpenSSL http://www.openssl.org/
1099 PolarSSL http://polarssl.org/
1100 yassl http://www.yassl.com/
1101 Zlib http://www.zlib.net/
1103 MingW http://www.mingw.org/
1104 MinGW-w64 http://mingw-w64.sourceforge.net/
1105 OpenWatcom http://www.openwatcom.org/