Loading configure.ac +23 −0 Original line number Diff line number Diff line Loading @@ -1954,6 +1954,29 @@ AC_HELP_STRING([--disable-cookies],[Disable cookies support]), AC_MSG_RESULT(yes) ) dnl ************************************************************ dnl Enable hiding of internal symbols in library to reduce its size and dnl speed dynamic linking of applications. This currently is only supported dnl on gcc >= 4.0 dnl AC_MSG_CHECKING([whether to enable hidden symbols in the library]) AC_ARG_ENABLE(hidden-symbols, AC_HELP_STRING([--enable-hidden-symbols],[Hide internal symbols in library (gcc>=4)]) AC_HELP_STRING([--disable-hidden-symbols],[Leave all symbols with default visibility in library]), [ case "$enableval" in no) AC_MSG_RESULT(no) ;; *) AC_MSG_RESULT(yes) AC_DEFINE(CURL_HIDDEN_SYMBOLS, 1, [to enable hidden symbols]) AC_SUBST(CURL_HIDDEN_SYMBOLS) CFLAGS="$CFLAGS -fvisibility=hidden" ;; esac ], AC_MSG_RESULT(no) ) dnl ************************************************************ if test "x$ws2" = "xyes"; then dnl If ws2_32 is wanted, make sure it is the _last_ lib in LIBS (makes Loading docs/INSTALL +22 −4 Original line number Diff line number Diff line Loading @@ -506,13 +506,17 @@ CROSS COMPILE ./configure --host=ARCH-OS REDUCING SIZE ============= There are a number of configure options that can be used to reduce the size of libcurl for embedded applications where binary size is an important factor. First, be sure to set the CFLAGS environment variable when configuring with any compiler optimization flags to reduce the size of the binary. For gcc, this would mean at minimum: important factor. First, be sure to set the CFLAGS variable when configuring with any relevant compiler optimization flags to reduce the size of the binary. For gcc, this would mean at minimum the -Os option and probably the -march=X option as well, e.g.: env CFLAGS='-Os' ./configure ... ./configure CFLAGS='-Os' ... Be sure to specify as many --disable- and --without- flags on the configure command-line as you can to disable all the libcurl features that you Loading @@ -526,10 +530,24 @@ CROSS COMPILE --disable-crypto-auth (disables HTTP cryptographic authentication) --disable-ipv6 (disables support for IPv6) --disable-verbose (eliminates debugging strings and error code strings) --enable-hidden-symbols (eliminates unneeded symbols in library) --without-libidn (disables support for the libidn DNS library) --without-ssl (disables support for SSL/TLS) --without-zlib (disables support for on-the-fly decompression) The GNU linker has a number of options to reduce the size of the libcurl dynamic libraries on some platforms even further. Specify them by giving the options -Wl,-Bsymbolic and -Wl,-s on the gcc command-line. Be sure also to strip debugging symbols from your binaries after compiling using 'strip' (or the appropriate variant if cross-compiling). If space is really tight, you may be able to remove some unneeded sections of the library using the -R option to objcopy (e.g. the .comment section). Using these techniques it is possible to create an HTTP-only shared libcurl library for i386 Linux platforms that is less than 90 KB in size (as of version 7.15.4). You may find that statically linking libcurl to your application will result in a lower total size. Loading include/curl/curl.h +11 −1 Original line number Diff line number Diff line Loading @@ -58,8 +58,18 @@ extern "C" { #define CURL_EXTERN __declspec(dllimport) #endif #else #ifdef CURL_HIDDEN_SYMBOLS /* * On gcc >= 4 if -fvisibility=hidden is given then this is used to cause * external definitions to be put into the shared library. It makes no * difference to applications whether this is set or not, only the library. */ #define CURL_EXTERN __attribute__ ((visibility ("default"))) #else #define CURL_EXTERN #endif #endif /* * We want the typedef curl_off_t setup for large file support on all Loading Loading
configure.ac +23 −0 Original line number Diff line number Diff line Loading @@ -1954,6 +1954,29 @@ AC_HELP_STRING([--disable-cookies],[Disable cookies support]), AC_MSG_RESULT(yes) ) dnl ************************************************************ dnl Enable hiding of internal symbols in library to reduce its size and dnl speed dynamic linking of applications. This currently is only supported dnl on gcc >= 4.0 dnl AC_MSG_CHECKING([whether to enable hidden symbols in the library]) AC_ARG_ENABLE(hidden-symbols, AC_HELP_STRING([--enable-hidden-symbols],[Hide internal symbols in library (gcc>=4)]) AC_HELP_STRING([--disable-hidden-symbols],[Leave all symbols with default visibility in library]), [ case "$enableval" in no) AC_MSG_RESULT(no) ;; *) AC_MSG_RESULT(yes) AC_DEFINE(CURL_HIDDEN_SYMBOLS, 1, [to enable hidden symbols]) AC_SUBST(CURL_HIDDEN_SYMBOLS) CFLAGS="$CFLAGS -fvisibility=hidden" ;; esac ], AC_MSG_RESULT(no) ) dnl ************************************************************ if test "x$ws2" = "xyes"; then dnl If ws2_32 is wanted, make sure it is the _last_ lib in LIBS (makes Loading
docs/INSTALL +22 −4 Original line number Diff line number Diff line Loading @@ -506,13 +506,17 @@ CROSS COMPILE ./configure --host=ARCH-OS REDUCING SIZE ============= There are a number of configure options that can be used to reduce the size of libcurl for embedded applications where binary size is an important factor. First, be sure to set the CFLAGS environment variable when configuring with any compiler optimization flags to reduce the size of the binary. For gcc, this would mean at minimum: important factor. First, be sure to set the CFLAGS variable when configuring with any relevant compiler optimization flags to reduce the size of the binary. For gcc, this would mean at minimum the -Os option and probably the -march=X option as well, e.g.: env CFLAGS='-Os' ./configure ... ./configure CFLAGS='-Os' ... Be sure to specify as many --disable- and --without- flags on the configure command-line as you can to disable all the libcurl features that you Loading @@ -526,10 +530,24 @@ CROSS COMPILE --disable-crypto-auth (disables HTTP cryptographic authentication) --disable-ipv6 (disables support for IPv6) --disable-verbose (eliminates debugging strings and error code strings) --enable-hidden-symbols (eliminates unneeded symbols in library) --without-libidn (disables support for the libidn DNS library) --without-ssl (disables support for SSL/TLS) --without-zlib (disables support for on-the-fly decompression) The GNU linker has a number of options to reduce the size of the libcurl dynamic libraries on some platforms even further. Specify them by giving the options -Wl,-Bsymbolic and -Wl,-s on the gcc command-line. Be sure also to strip debugging symbols from your binaries after compiling using 'strip' (or the appropriate variant if cross-compiling). If space is really tight, you may be able to remove some unneeded sections of the library using the -R option to objcopy (e.g. the .comment section). Using these techniques it is possible to create an HTTP-only shared libcurl library for i386 Linux platforms that is less than 90 KB in size (as of version 7.15.4). You may find that statically linking libcurl to your application will result in a lower total size. Loading
include/curl/curl.h +11 −1 Original line number Diff line number Diff line Loading @@ -58,8 +58,18 @@ extern "C" { #define CURL_EXTERN __declspec(dllimport) #endif #else #ifdef CURL_HIDDEN_SYMBOLS /* * On gcc >= 4 if -fvisibility=hidden is given then this is used to cause * external definitions to be put into the shared library. It makes no * difference to applications whether this is set or not, only the library. */ #define CURL_EXTERN __attribute__ ((visibility ("default"))) #else #define CURL_EXTERN #endif #endif /* * We want the typedef curl_off_t setup for large file support on all Loading