lloyd / yajl

A fast streaming JSON parsing library in C.
http://lloyd.github.com/yajl
ISC License
2.15k stars 436 forks source link

OpenWrt (uClibc) compilation: undefined reference to `__isnan' and `__isinf' #137

Closed Ferk closed 10 years ago

Ferk commented 10 years ago

I'm trying to cross-compile yajl in OpenWrt (which uses uClibc) and I'm obtaining the following error:

[ 76%] Built target yajl_test
make[6]: Entering directory '/SAMA53EK/server/openwrt/build_dir/target-arm_v7-a_uClibc-0.9.33.2_eabi/yajl-2.1.0/build'
make[6]: Leaving directory '/SAMA53EK/server/openwrt/build_dir/target-arm_v7-a_uClibc-0.9.33.2_eabi/yajl-2.1.0/build'
make[6]: Entering directory '/SAMA53EK/server/openwrt/build_dir/target-arm_v7-a_uClibc-0.9.33.2_eabi/yajl-2.1.0/build'
Linking C executable gen-extra-close
../../yajl-2.1.0/lib/libyajl.so.2.1.0: undefined reference to `__isnan'
../../yajl-2.1.0/lib/libyajl.so.2.1.0: undefined reference to `__isinf'
/SAMA53EK/server/openwrt/staging_dir/toolchain-arm_v7-a_gcc-4.6-linaro_uClibc-0.9.33.2_eabi/lib/gcc/arm-openwrt-linux-uclibcgnueabi/4.6.4/../../../../
arm-openwrt-linux-uclibcgnueabi/bin/ld: warning: .init_array section has zero size
collect2: ld returned 1 exit status

Any advice? I saw there was an issue in 2011 that already addressed this, but it's no longer appliable, looks like libm should have been already there, so am I doing something wrong or is there a problem in yajl build system?

This is the configure line from OpenWrt:

AR=arm-openwrt-linux-uclibcgnueabi-ar AS="arm-openwrt-linux-uclibcgnueabi-gcc -c -Os -pipe -march=armv7-a -mtune=cortex-a5 -fno-caller-saves -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -msoft-float" LD=arm-openwrt-linux-uclibcgnueabi-ld NM=arm-openwrt-linux-uclibcgnueabi-nm CC="arm-openwrt-linux-uclibcgnueabi-gcc" GCC="arm-openwrt-linux-uclibcgnueabi-gcc" CXX="arm-openwrt-linux-uclibcgnueabi-g++" RANLIB=arm-openwrt-linux-uclibcgnueabi-ranlib STRIP=arm-openwrt-linux-uclibcgnueabi-strip OBJCOPY=arm-openwrt-linux-uclibcgnueabi-objcopy OBJDUMP=arm-openwrt-linux-uclibcgnueabi-objdump SIZE=arm-openwrt-linux-uclibcgnueabi-size CFLAGS="-Os -pipe -march=armv7-a -mtune=cortex-a5 -fno-caller-saves -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -msoft-float " CXXFLAGS="-Os -pipe -march=armv7-a -mtune=cortex-a5 -fno-caller-saves -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -msoft-float " CPPFLAGS="-I/SAMA53EK/server/openwrt/staging_dir/target-arm_v7-a_uClibc-0.9.33.2_eabi/usr/include -I/SAMA53EK/server/openwrt/staging_dir/target-arm_v7-a_uClibc-0.9.33.2_eabi/include -I/SAMA53EK/server/openwrt/staging_dir/toolchain-arm_v7-a_gcc-4.6-linaro_uClibc-0.9.33.2_eabi/usr/include -I/SAMA53EK/server/openwrt/staging_dir/toolchain-arm_v7-a_gcc-4.6-linaro_uClibc-0.9.33.2_eabi/include " LDFLAGS="-L/SAMA53EK/server/openwrt/staging_dir/target-arm_v7-a_uClibc-0.9.33.2_eabi/usr/lib -L/SAMA53EK/server/openwrt/staging_dir/target-arm_v7-a_uClibc-0.9.33.2_eabi/lib -L/SAMA53EK/server/openwrt/staging_dir/toolchain-arm_v7-a_gcc-4.6-linaro_uClibc-0.9.33.2_eabi/usr/lib -L/SAMA53EK/server/openwrt/staging_dir/toolchain-arm_v7-a_gcc-4.6-linaro_uClibc-0.9.33.2_eabi/lib "   ./configure --target=arm-openwrt-linux --host=arm-openwrt-linux --build=x86_64-unknown-linux-gnu --program-prefix="" --program-suffix="" --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/lib --sysconfdir=/etc --datadir=/usr/share --localstatedir=/var --mandir=/usr/man --infodir=/usr/info --disable-nls 

The make command:

CFLAGS="-Os -pipe -march=armv7-a -mtune=cortex-a5 -fno-caller-saves -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -msoft-float  -I/SAMA53EK/server/openwrt/staging_dir/target-arm_v7-a_uClibc-0.9.33.2_eabi/usr/include -I/SAMA53EK/server/openwrt/staging_dir/target-arm_v7-a_uClibc-0.9.33.2_eabi/include -I/SAMA53EK/server/openwrt/staging_dir/toolchain-arm_v7-a_gcc-4.6-linaro_uClibc-0.9.33.2_eabi/usr/include -I/SAMA53EK/server/openwrt/staging_dir/toolchain-arm_v7-a_gcc-4.6-linaro_uClibc-0.9.33.2_eabi/include " CXXFLAGS="-Os -pipe -march=armv7-a -mtune=cortex-a5 -fno-caller-saves -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -msoft-float  -I/SAMA53EK/server/openwrt/staging_dir/target-arm_v7-a_uClibc-0.9.33.2_eabi/usr/include -I/SAMA53EK/server/openwrt/staging_dir/target-arm_v7-a_uClibc-0.9.33.2_eabi/include -I/SAMA53EK/server/openwrt/staging_dir/toolchain-arm_v7-a_gcc-4.6-linaro_uClibc-0.9.33.2_eabi/usr/include -I/SAMA53EK/server/openwrt/staging_dir/toolchain-arm_v7-a_gcc-4.6-linaro_uClibc-0.9.33.2_eabi/include " LDFLAGS="-L/SAMA53EK/server/openwrt/staging_dir/target-arm_v7-a_uClibc-0.9.33.2_eabi/usr/lib -L/SAMA53EK/server/openwrt/staging_dir/target-arm_v7-a_uClibc-0.9.33.2_eabi/lib -L/SAMA53EK/server/openwrt/staging_dir/toolchain-arm_v7-a_gcc-4.6-linaro_uClibc-0.9.33.2_eabi/usr/lib -L/SAMA53EK/server/openwrt/staging_dir/toolchain-arm_v7-a_gcc-4.6-linaro_uClibc-0.9.33.2_eabi/lib " make -j1 -C /SAMA53EK/server/openwrt/build_dir/target-arm_v7-a_uClibc-0.9.33.2_eabi/yajl-2.1.0/. AR=arm-openwrt-linux-uclibcgnueabi-ar AS="arm-openwrt-linux-uclibcgnueabi-gcc -c -Os -pipe -march=armv7-a -mtune=cortex-a5 -fno-caller-saves -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -msoft-float" LD=arm-openwrt-linux-uclibcgnueabi-ld NM=arm-openwrt-linux-uclibcgnueabi-nm CC="arm-openwrt-linux-uclibcgnueabi-gcc" GCC="arm-openwrt-linux-uclibcgnueabi-gcc" CXX="arm-openwrt-linux-uclibcgnueabi-g++" RANLIB=arm-openwrt-linux-uclibcgnueabi-ranlib STRIP=arm-openwrt-linux-uclibcgnueabi-strip OBJCOPY=arm-openwrt-linux-uclibcgnueabi-objcopy OBJDUMP=arm-openwrt-linux-uclibcgnueabi-objdump SIZE=arm-openwrt-linux-uclibcgnueabi-size CROSS="arm-openwrt-linux-uclibcgnueabi-" ARCH="arm" ;
Ferk commented 10 years ago

I'm sorry, my mistake. Please ignore this, there was an error in the build parameters of my setup, the "-lm" build option was missing.