Since nobody responded, I had to figure it out myself :-)

The solution is to keep the apr source tree after the apr build and, when cross compiling apr-util, set the --with-apr option NOT to the directory where the apr-1-config was installed BUT to the apr source tree so it finds the apr-1-config located there.

The apr-1-config in the apr source tree contains line:  
while the installed apr-1-config has this options set to:

The apr-util build recognizes that option and takes all information it needs from the apr source tree. The cross-compile process then works OK.


Similar approach should be used when cross-compiling activemq-cpp which needs options to be set for config files of both apr and apr-util.

Subject:        How to cross compile apr & apr-util ?


I have problem to correctly setup cross compile for APR and APR-util for
Linux ARM (big endian) target. After some experiments to bypass tests that
need to execute code on the targt platform I suceeded to cross compile
APR. Lets say the APR is built using these commands

./configure --prefix=/usr \
           --host=armv5teb-softfloat-linux-gnueabi \
           ac_cv_file__dev_zero="yes" \
           ac_cv_func_setpgrp_void="yes" \
           apr_cv_process_shared_works="yes" \
           apr_cv_mutex_robust_shared="no" \
           apr_cv_tcp_nodelay_with_cork="yes" \
           ac_cv_sizeof_struct_iovec="8" \
           apr_cv_mutex_recursive="yes" \
           CPPFLAGS=-I/tmp/usr/include \

make all
make DESTDIR=/tmp install

i.e. the cross compiled APR is installed in /tmp/usr/bin ,
/tmp/usr/build-1, /tmp/usr/include ...

Now if I want to build apr-utils the configure script fails to find the
correct build-1 directory:

./configure --prefix=/usr \
           --host=armv5teb-softfloat-linux-gnueabi \
           --with-apr=/tmp/usr \
           CPPFLAGS=-I/tmp/usr/include \

configure: WARNING: If you wanted to set the --build type, don't use
   If a cross compiler is detected then cross compile mode will be used.
checking build system type... i686-pc-linux-gnu
checking host system type... armv5teb-softfloat-linux-gnueabi
checking target system type... armv5teb-softfloat-linux-gnueabi
checking for a BSD-compatible install... /usr/bin/install -c
checking for working mkdir -p... yes
APR-util Version: 1.3.4
checking for chosen layout... apr-util
checking for armv5teb-softfloat-linux-gnueabi-gcc...
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... yes
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether armv5teb-softfloat-linux-gnueabi-gcc accepts -g... yes
checking for armv5teb-softfloat-linux-gnueabi-gcc option to accept ISO
C89... none needed
Applying apr-util hints file rules for armv5teb-softfloat-linux-gnueabi
checking for APR... yes
./configure: line 3761: cd: /usr/build-1: No such file or directory

The reason is that the ./configure script finds the
/tmp/usr/bin/apr-1-config but querying the apr-1-config for the APR
configuration it points to /usr which is correct from the target
filesystem point of view but incorrect from the build process point of

How should setup the cross compile environment to get aroud this problem?


Mira Kes