pellegre / libcrafter

A high level C++ network packet sniffing and crafting library.
298 stars 88 forks source link

Error during cross-compile for android arm using ndk #44

Closed SiavashMaleki closed 8 years ago

SiavashMaleki commented 8 years ago

Hi, i was cross compiling libcrafter for android but it breaks with this error, i dont know if it's a bug or my misconfiguration

make[1]: Entering directory '/home/siavash/lib/craft/libcrafter-master/libcrafter'
depbase=`echo crafter/Fields/MACAddress.lo | sed 's|[^/]*$|.deps/&|;s|\.lo$||'`;\
/bin/sh ./libtool  --tag=CXX   --mode=compile /home/siavash/lib/and/bin/arm-linux-androideabi-g++ -DHAVE_CONFIG_H -I.  -I/usr/include/pcap  -ansi -pedantic -Wall -g -O2 -MT crafter/Fields/MACAddress.lo -MD -MP -MF $depbase.Tpo -c -o crafter/Fields/MACAddress.lo crafter/Fields/MACAddress.cpp &&\
mv -f $depbase.Tpo $depbase.Plo
libtool: compile:  /home/siavash/lib/and/bin/arm-linux-androideabi-g++ -DHAVE_CONFIG_H -I. -I/usr/include/pcap -ansi -pedantic -Wall -g -O2 -MT crafter/Fields/MACAddress.lo -MD -MP -MF crafter/Fields/.deps/MACAddress.Tpo -c crafter/Fields/MACAddress.cpp  -fPIC -DPIC -o crafter/Fields/.libs/MACAddress.o
depbase=`echo crafter/Fields/NumericFields.lo | sed 's|[^/]*$|.deps/&|;s|\.lo$||'`;\
/bin/sh ./libtool  --tag=CXX   --mode=compile /home/siavash/lib/and/bin/arm-linux-androideabi-g++ -DHAVE_CONFIG_H -I.  -I/usr/include/pcap  -ansi -pedantic -Wall -g -O2 -MT crafter/Fields/NumericFields.lo -MD -MP -MF $depbase.Tpo -c -o crafter/Fields/NumericFields.lo crafter/Fields/NumericFields.cpp &&\
mv -f $depbase.Tpo $depbase.Plo
libtool: compile:  /home/siavash/lib/and/bin/arm-linux-androideabi-g++ -DHAVE_CONFIG_H -I. -I/usr/include/pcap -ansi -pedantic -Wall -g -O2 -MT crafter/Fields/NumericFields.lo -MD -MP -MF crafter/Fields/.deps/NumericFields.Tpo -c crafter/Fields/NumericFields.cpp  -fPIC -DPIC -o crafter/Fields/.libs/NumericFields.o
crafter/Fields/NumericFields.cpp: In member function 'virtual void Crafter::Int64Field::PrintValue(std::ostream&) const':
crafter/Fields/NumericFields.cpp:275:48: error: ambiguous overload for 'operator<<' in '(& std::operator<< [with _Traits = std::char_traits<char>]((* & std::operator<< [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]((* & str), (*(const std::basic_string<char, std::char_traits<char>, std::allocator<char> >*)(& Crafter::FieldInfo::GetName() const())))), ((char const*)" = ")))->std::basic_ostream<_CharT, _Traits>::operator<< [with _CharT = char, _Traits = std::char_traits<char>, std::basic_ostream<_CharT, _Traits>::_Self = std::basic_ostream<char, std::char_traits<char> >, std::basic_ostream<_CharT, _Traits>::__ios_base_fn = std::ios_base& (*)(std::ios_base&)](std::dec) << (long long unsigned int)((const Crafter::Int64Field*)this)->Crafter::Int64Field::<anonymous>.Crafter::Field<long long unsigned int>::human'
crafter/Fields/NumericFields.cpp:275:48: note: candidates are:
/home/siavash/lib/and/bin/../lib/gcc/../../include/c++/4.6/stl/_ostream.h:104:10: note: std::basic_ostream<_CharT, _Traits>::_Self& std::basic_ostream<_CharT, _Traits>::operator<<(unsigned char) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_ostream<_CharT, _Traits>::_Self = std::basic_ostream<char, std::char_traits<char> >]
/home/siavash/lib/and/bin/../lib/gcc/../../include/c++/4.6/stl/_ostream.c:222:33: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(short int) [with _CharT = char, _Traits = std::char_traits<char>]
/home/siavash/lib/and/bin/../lib/gcc/../../include/c++/4.6/stl/_ostream.c:230:33: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(short unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
/home/siavash/lib/and/bin/../lib/gcc/../../include/c++/4.6/stl/_ostream.c:236:33: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(int) [with _CharT = char, _Traits = std::char_traits<char>]
/home/siavash/lib/and/bin/../lib/gcc/../../include/c++/4.6/stl/_ostream.c:245:33: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
/home/siavash/lib/and/bin/../lib/gcc/../../include/c++/4.6/stl/_ostream.c:258:33: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long int) [with _CharT = char, _Traits = std::char_traits<char>]
/home/siavash/lib/and/bin/../lib/gcc/../../include/c++/4.6/stl/_ostream.c:262:33: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
/home/siavash/lib/and/bin/../lib/gcc/../../include/c++/4.6/stl/_ostream.c:276:33: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(float) [with _CharT = char, _Traits = std::char_traits<char>]
/home/siavash/lib/and/bin/../lib/gcc/../../include/c++/4.6/stl/_ostream.c:280:33: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(double) [with _CharT = char, _Traits = std::char_traits<char>]
/home/siavash/lib/and/bin/../lib/gcc/../../include/c++/4.6/stl/_ostream.c:285:33: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long double) [with _CharT = char, _Traits = std::char_traits<char>]
/home/siavash/lib/and/bin/../lib/gcc/../../include/c++/4.6/stl/_ostream.c:295:33: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(bool) [with _CharT = char, _Traits = std::char_traits<char>]
/home/siavash/lib/and/bin/../lib/gcc/../../include/c++/4.6/stl/_ostream.h:297:1: note: std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&, char) [with _CharT = char, _Traits = std::char_traits<char>]
/home/siavash/lib/and/bin/../lib/gcc/../../include/c++/4.6/stl/_ostream.h:304:1: note: std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char, _Traits>&, char) [with _Traits = std::char_traits<char>]
/home/siavash/lib/and/bin/../lib/gcc/../../include/c++/4.6/stl/_ostream.h:311:1: note: std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char, _Traits>&, signed char) [with _Traits = std::char_traits<char>]
/home/siavash/lib/and/bin/../lib/gcc/../../include/c++/4.6/stl/_ostream.h:318:1: note: std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char, _Traits>&, unsigned char) [with _Traits = std::char_traits<char>]
Makefile:1108: recipe for target 'crafter/Fields/NumericFields.lo' failed
make[1]: *** [crafter/Fields/NumericFields.lo] Error 1
make[1]: Leaving directory '/home/siavash/lib/craft/libcrafter-master/libcrafter'
Makefile:620: recipe for target 'all' failed
make: *** [all] Error 2
pellegre commented 8 years ago

Hi, what version of the NDK?

SiavashMaleki commented 8 years ago

my ndk version is "r10c-1", and platform version is andriod-21

oliviertilmans commented 8 years ago

You need to export additional env. var to not confuse autotools:

    export CC=arm-linux-androideabi-gcc
    export CXX=arm-linux-androideabi-g++
    export RANLIB=arm-linux-androideabi-ranlib
    export AR=arm-linux-androideabi-ar
    export LD=arm-linux-androideabi-ld
    export STRIP=arm-linux-androideabi-strip
    export PATH=PATH-TO-NDK-BIN:$PATH

You also need to tell the configure about it, via the --host switch (--host=arm-linux)

Also, could you try to use a later version of the provided gcc in the NDK (e.g. 4.9) ? I've been able to successfully compile libcrafter for platform rev. 15 with gcc 4.9 starting from this commit: bf7322b169c8991095b316d6284b3a40c2144d5e

Keep in mind that a few more stuff will be needed to get everything working (as indicated by the commit message). An example to solve it is found here: https://github.com/tracebox/android/blob/master/build.sh And can be adapted as:

wget http://ftp.isc.org/isc/libbind/6.0/libbind-6.0.tar.gz
tar -zxf libbind-6.0.tar.gz
cd libbind-6.0
mkdir -p build
STD_CDEFINES="-DS_IREAD=S_IRUSR -DS_IWRITE=S_IWUSR -DS_IEXEC=S_IXUSR" \
    ./configure \
    --host=arm-linux \
    --disable-shared \
    --prefix=build \
    --with-randomdev=/dev/random
make -j4
make install
rm build/include/bind/arpa/inet.h
rm build/include/bind/netdb.h
cd ..
mkdir -p usr/include/sys
echo "#include <sys/types.h>" > usr/include/sys/bitypes.h
export CFLAGS="$CFLAGS -I$(pwd)//usr/include -I$(pwd)/libbind-6.0/build/include/libbind"
export CXXFLAGS="$CXXFLAGS -I$(pwd)//usr/include -I$(pwd)/libbind-6.0/build/include/libbind"
export LDFLAGS="$LDFLAGS -L$(pwd)/libbind-6.0/build/lib"

# Build libcrafter here ...

Hope this helps ...

SiavashMaleki commented 8 years ago

it worked perfectly, thank you for your help and time,