Hi, When cross-compiling a program for win32 (on linux, using mingw32), the linking with apr-2 (svn version as of today) failed with the following error: /some/path/lib/libapr-2.a(apr_strings.o): In function `apr_strtoff@16': /some/other/path/apr/strings/apr_strings.c:240: undefined reference to `_strtoi'
The error is very similar to the one in this old thread, which was apparently never solved: http://comments.gmane.org/gmane.comp.apache.apr.devel/12331 The macro APR_OFF_T_STRFN is defined like this for win32: #if APR_HAS_LARGE_FILES #ifdef APR_INT64_STRFN #define APR_OFF_T_STRFN APR_INT64_STRFN #else #define APR_OFF_T_STRFN apr_strtoi64 #endif #else #if defined(_WIN32_WCE) #define APR_OFF_T_STRFN strtol #else #define APR_OFF_T_STRFN strtoi #endif #endif APR_HAS_LARGE_FILES is set to 0, so the last define is used and APR_OFF_T_STRFN is defined to strtoi. If I understand correctly, APR_HAS_LARGE_FILES should be set to 1 instead. This variable is set in include/apr.h, itself generated from include/apr.h.in, using the autoconf variable aprlfs. The following lines in configure.in (starting at line 1690) define aprlfs: APR_CHECK_SIZEOF_EXTENDED([#include <sys/types.h>], off_t, 8) if test "${ac_cv_sizeof_off_t}${apr_cv_use_lfs64}" = "4yes"; then # Enable LFS aprlfs=1 AC_CHECK_FUNCS([mmap64 sendfile64 sendfilev64 mkstemp64 readdir64_r]) elif test "${ac_cv_sizeof_off_t}" != "${ac_cv_sizeof_size_t}"; then # unsure of using -gt above is as portable, can can't forsee where # off_t can legitimately be smaller than size_t aprlfs=1 else aprlfs=0 fi Here are the relevant values in my case: ac_cv_sizeof_off_t = 8 ac_cv_sizeof_size_t = 8 apr_cv_use_lfs64 = yes So with these tests, aprlfs is set to 0. Patching configure.in to set it to 1 unconditionally defines APR_HAS_LARGE_FILES to 1, and it solves my link problem, but I thought I would tell you, so you can implement a more subtle fix to this problem. In particular, the hard-coded "4yes" seems a bit strange to me, but I don't understand the logic enough to propose a fix myself... Best regards, -- Olivier Teulière
