Error while compiling library for ARM platform - c++

I'm using my toolchain to compile gst-plugins-bad for ARM. I compiled everything that should be needed to build it, including gstreamer, libmms etc... and placed in my sysroot both the headers, the libraries and files related to pkg-config.
When I configure everyrhing seems ok, but trying to compile results in:
luca#luca-work-laptop:~/gstreamer/gst-plugins-bad-0.10.21$ make
make all-recursive
make[1]: Entering directory `/home/luca/gstreamer/gst-plugins-bad-0.10.21'
Making all in gst-libs
make[2]: Entering directory `/home/luca/gstreamer/gst-plugins-bad-0.10.21/gst-libs'
Making all in gst
make[3]: Entering directory `/home/luca/gstreamer/gst-plugins-bad-0.10.21/gst-libs/gst'
Making all in interfaces
make[4]: Entering directory `/home/luca/gstreamer/gst-plugins-bad-0.10.21/gst-libs/gst/interfaces'
make all-am
make[5]: Entering directory `/home/luca/gstreamer/gst-plugins-bad-0.10.21/gst-libs/gst/interfaces'
make[5]: Nothing to be done for `all-am'.
make[5]: Leaving directory `/home/luca/gstreamer/gst-plugins-bad-0.10.21/gst-libs/gst/interfaces'
make[4]: Leaving directory `/home/luca/gstreamer/gst-plugins-bad-0.10.21/gst-libs/gst/interfaces'
Making all in signalprocessor
make[4]: Entering directory `/home/luca/gstreamer/gst-plugins-bad-0.10.21/gst-libs/gst/signalprocessor'
make[4]: Nothing to be done for `all'.
make[4]: Leaving directory `/home/luca/gstreamer/gst-plugins-bad-0.10.21/gst-libs/gst/signalprocessor'
Making all in video
make[4]: Entering directory `/home/luca/gstreamer/gst-plugins-bad-0.10.21/gst-libs/gst/video'
CC libgstbasevideo_0.10_la-gstbasevideoutils.lo
CC libgstbasevideo_0.10_la-gstbasevideocodec.lo
CC libgstbasevideo_0.10_la-gstbasevideodecoder.lo
CC libgstbasevideo_0.10_la-gstbasevideoencoder.lo
CC libgstbasevideo_0.10_la-gstbasevideoparse.lo
CCLD libgstbasevideo-0.10.la
libtool: link: warning: library `/home/luca/.../arm-2010q1_vsync/arm-none-linux-gnueabi/libc/usr/lib/libgstbase-0.10.la' was moved.
libtool: link: warning: library `/home/luca/.../arm-2010q1_vsync/arm-none-linux-gnueabi/libc/usr/lib/libgstreamer-0.10.la' was moved.
libtool: link: warning: library `/home/luca/.../arm-2010q1_vsync/arm-none-linux-gnueabi/libc/usr/lib/libgobject-2.0.la' was moved.
libtool: link: warning: library `/home/luca/.../arm-2010q1_vsync/arm-none-linux-gnueabi/libc/usr/lib/libgmodule-2.0.la' was moved.
libtool: link: warning: library `/home/luca/.../arm-2010q1_vsync/arm-none-linux-gnueabi/libc/usr/lib/libgthread-2.0.la' was moved.
libtool: link: warning: library `/home/luca/.../arm-2010q1_vsync/arm-none-linux-gnueabi/libc/usr/lib/libglib-2.0.la' was moved.
libtool: link: warning: library `/home/luca/.../arm-2010q1_vsync/arm-none-linux-gnueabi/libc/usr/lib/libgstvideo-0.10.la' was moved.
/usr/lib/libxml2.so: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make[4]: *** [libgstbasevideo-0.10.la] Error 1
make[4]: Leaving directory `/home/luca/gstreamer/gst-plugins-bad-0.10.21/gst-libs/gst/video'
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory `/home/luca/gstreamer/gst-plugins-bad-0.10.21/gst-libs/gst'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/luca/gstreamer/gst-plugins-bad-0.10.21/gst-libs'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/luca/gstreamer/gst-plugins-bad-0.10.21'
make: *** [all] Error 2
It seems it is trying to link against my desktop libxml2. Why isn't it linking against the one I have in my toolchain which has all the symbols?

Does your configure script support autoconf cross-compilation ?
In the configure.in , what is the value of the shell variable cross_compiling after calling AC_PROG_CC ?
If it is set to no, then is the makefile set to use your cross compiler ?
To set these you can either override them in the manual or use environment variables like
the example below
export CC=arch-gcc
export CXX=arch-c++
export arch-ld
export AR=arch-ar
export AS=arch-as
export NM=arch-nm
export STRIP=arch-strip
If it is set to yes, then check the include path specifically for libxml in the makefile.
Another possible resource for compiling gst-plugins-bad on ARM is the following guide

Are you sure your toolchain has libxml2? Or rather, your sysroot.
You might need to export PKG_CONFIG, so when you run 'pkg-config --libs libxml-2.0' you get the right path. Also, you can check the resulting Makefile to see what are the real flags used, or build with the verbose option on.
It's also possible that GStreamer's build stuff is broken for cross-compilation, which is one of the reasons I use scratchbox 2; it makes cross-compilation transparent.

Related

FingerJetFXOSE Cygwin compilation error

Can someone help me, Im having problem in compiling FingerJetFXOSE in Cygwin 32
gcc version 5.4.0 (GCC)
I used the following command:
$ make -f Makefile
make -C src/libFRFXLL
make[1]: Entering directory '/home/src/FingerJetFXOSE-master/src/libFRFXLL'
make -C src/libFRFXLL
make[2]: Entering directory '/home/src/FingerJetFXOSE- master/src/libFRFXLL/src/libFRFXLL'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/src/FingerJetFXOSE-master/src/libFRFXLL/src/libFRFXLL'
make[1]: Leaving directory '/home/src/FingerJetFXOSE-master/src/libFRFXLL'
make -C src/libfjfx
make[1]: Entering directory '/home/src/FingerJetFXOSE-master/src/libfjfx'
g++ -O2 -Wl,--strip-all -I../../include -I../libFRFXLL/include -fno- exceptions-fno-rtti -fno-stack-protector -fPIC -shared -nodefaultlibs -Wl,--version-script
I got this error at the end:
../libFRFXLL/lib/libFRFXLL.a(FRFXLLCreateFeatureSetInPlaceFromRaw.o):FRFXLLCreat
eFeatureSetInPlaceFromRaw.cpp:(.text$_ZN14FingerJetFxOSE15FpRecEngineImpl20Featu
reExtractionObjINS0_8Embedded24FeatureExtractionInPlaceEE16CreateFeatureSetIhEEi
PT_jjjjjPPv[__ZN14FingerJetFxOSE15FpRecEngineImpl20FeatureExtractionObjINS0_8Emb
edded24FeatureExtractionInPlaceEE16CreateFeatureSetIhEEiPT_jjjjjPPv]+0x159c): un
defined reference to `memmove'
collect2: error: ld returned 1 exit status
make[1]: *** [Makefile:62: ../../lib/libfjfx.so.5.2.0] Error 1
make[1]: Leaving directory '/home/usr/FingerJetFXOSE-master/src/libfjfx'
make: *** [Makefile:50: src/libfjfx] Error 2
Thanks
I looked at the makefiles for the FingerJetFXOSE project here:
https://github.com/FingerJetFXOSE/FingerJetFXOSE
The makefiles do not support Cygwin. The README says that Windows is supported, but I suspect they mean a Visual-Studio-based build after a manual source import.
I think you either have to compile on GNU/Linux, or compile this code without the upstream makefiles.

Linking library with gcc - ld: cannot find -larpack

I am installing software on a server with no root privileges. I come across the following error during installation:
make[1]: *** [hgaprec] Error 1
make[1]: Leaving directory `/seq/.../SOFTWARE/hgaprec/src'
make: *** [all-recursive] Error 1
Making install in src
make[1]: Entering directory `/seq/.../SOFTWARE/hgaprec/src'
g++ -O3 -o hgaprec ratings.o main.o log.o hgaprec.o -larpack -llapack -
lblas -lgsl -lpthread -lgslcblas
/.../software/free/Linux/redhat_6_x86_64/pkgs/gcc_5.2.0/bin/ld: cannot
find -larpack
collect2: error: ld returned 1 exit status
make[1]: *** [hgaprec] Error 1
make[1]: Leaving directory `/seq/.../SOFTWARE/hgaprec/src'
make: *** [install-recursive] Error 1
Since library arpack could not be found, I then installed it here /seq/.../SOFTWARE/hgaprec/ARPACK and found that the process generated a static file libarpack_LINUX.a. To link this static library to gcc the following command was used:
gcc -larpack -L/seq/.../SOFTWARE/hgaprec/ARPACK/libarpack_LINUX.a
However, I keep getting the same error while installation of the software that larpack was not found. Am I using the linking command wrong?
You either want gcc main.c /seq/../SOFTWARE/hgaprec/ARPACK/libarpack_LINUX.a (you don't need -l and -L if you're specifying the full path to static library), or as #Julian_Cienfuegos suggested gcc main.c -L/seq/../SOFTWARE/hgaprec/ARPACK/ -larpack_LINUX. This assumes you're only compiling a single file called main.c which contains your main() function, and outputs the a.out binary.
EDIT: Added explanation of main.c.
My issue got solved after including the ARPACK library path as part of LD flag in configure like so:
./configure --prefix=/seq/.../SOFTWARE/hgaprec LDFLAGS="-L/seq/.../SOFTWARE/hgaprec/ARPACK/"

compilation of Qt 5 fails under make in debian64

I tried to make qt 5.4.1 with openSsl configuration but i got some errors during make it.
I configured it as bellow :
OPENSSL_LIBS='-L/usr/local/ssl/lib -lssl -lcrypto' ./configure -prefix $PWD/qtbase -opensource -debug-and-release -nomake tests -openssl-linked -I/usr/local/ssl/include -L/usr/local/ssl/lib
and then make.
the last 10 line of output is:
/usr/bin/ld: /usr/local/ssl/lib/libssl.a(s2_srvr.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
/usr/local/ssl/lib/libssl.a: could not read symbols: Bad value
collect2: error: ld returned 1 exit status
make[3]: *** [../../lib/libQt5Network.so.5.4.1] Error 1
make[3]: Leaving directory `/mnt/l/software/qt-everywhere-opensource-src-5.4.1/qtbase/src/network'
make[2]: *** [sub-network-make_first] Error 2
make[2]: Leaving directory `/mnt/l/software/qt-everywhere-opensource-src-5.4.1/qtbase/src'
make[1]: *** [sub-src-make_first] Error 2
make[1]: Leaving directory `/mnt/l/software/qt-everywhere-opensource-src-5.4.1/qtbase'
make: *** [module-qtbase-make_first] Error 2
To link a static library into a shared library on x86_64, the static library needs to be compiled with -fPIC. You could now build OpenSSL manually with -fPIC set, but that'd be a bit of a hassle.
I'd suggest to configure Qt with -openssl instead of -openssl-linked. Then SSL won't be linked at compile time but loaded dynamically (dlopen) at runtime. It's the usual way to handle OpenSSL in Qt, also because of the incompabilities between the OpenSSL and GPL licenses.

Apache Thrift compilation error

I am trying to build apache thrift from source. After executing ./configure (which doesn't give any errors). However, when I execute make I get the following error:
/bin/bash ../../../libtool --tag=CXX --mode=link g++ -Wall -g -O2 -L/usr/lib -o Benchmark Benchmark.o libtestgencpp.la -lssl -lcrypto -lrt -lpthread
libtool: link: cannot find the library `RPC/thrift-0.9.1/lib/cpp/libthrift.la' or unhandled argument `RPC/thrift-0.9.1/lib/cpp/libthrift.la'
make[4]: *** [Benchmark] Error 1
make[4]: Leaving directory `/home/user/Documents/thrift-0.9.1/lib/cpp/test'
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory `/home/user/Documents/thrift-0.9.1/lib/cpp'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/user/Documents/thrift-0.9.1/lib'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/user/Documents/thrift-0.9.1'
make: *** [all] Error 2
Does anyone have any idea why this error occurs and how do I fix it?
Have you resolved this? I am currently successfully building the tarball of 0.93 on Ubuntu trusty (14.04) on x86 and arm architectures.
I would suggest trying the 0.93 tarball, and using cmake instead of ./configure (as that's worked better for me). Your mileage may vary, of course.

Apache thrift can not make

When I'm trying to configure and make thrift 0.9.1 it gives some errors. Can anyone tell me the reason for that and what should I do to overcome this issue. Errors are shown in below.
user#linux-yyzo:~/WorkDir/thrift-0.9.1> make
make all-recursive
make[1]: Entering directory `/home/user/WorkDir/thrift-0.9.1'
Making all in compiler/cpp
make[2]: Entering directory `/home/user/WorkDir/thrift-0.9.1/compiler/cpp'
make all-am
make[3]: Entering directory `/home/user/WorkDir/thrift-0.9.1/compiler/cpp'
\
\
/bin/sh ../../ylwrap `test -f 'src/thrifty.yy' || echo './'`src/thrifty.yy y.tab.c thrifty.cc y.tab.h thrifty.h y.output thrifty.output -- yacc -d
../../ylwrap: line 113: yacc: command not found
make[3]: *** [thrifty.cc] Error 1
make[3]: Leaving directory `/home/user/WorkDir/thrift-0.9.1/compiler/cpp'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home/user/WorkDir/thrift-0.9.1/compiler/cpp'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/user/WorkDir/thrift-0.9.1'
make: *** [all] Error 2
user#linux-yyzo:~/WorkDir/thrift-0.9.1>
There are two resources on the Thrift web site worth reading when one runs into troubles like this.
The Requirements give a good overview about the dependencies; the Building From Source page explains build steps and configure switches briefly. Additionally, the requirements page holds some links to more specific information for builds on Ubuntu, CentOS, Windows and OS X.