Cross-Compiling using makefile

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Cross-Compiling using makefile

Jump to solution
19,698 Views
chandraevolute
Contributor V

We have one existing application source which uses Makefile which set the compiler with something like CC=$(CROSS_COMPILE)gcc.

I have two variables in makefile CROSS_COMPILE and SYSROOT, i am setting these variables as shown below

# export ARCH=arm

# export CROSS_COMPILE=<path to cross compiler prefix> (e.g./opt/poky/1.5.1/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/ arm-poky-linux-gnueabi-)

#export SYSROOT=/opt/poky/1.8/sysroots/cortexa7hf-vfp-neon-poky-linux-gnueabi

# make clean

# make

If I give make I am getting the below error.

../../Outils/GLOG/GLOG/src/IniParser/dictionary.h:36:19: fatal error: stdio.h: No such file or directory

#include <stdio.h>

                  ^

compilation terminated.

Later I checked whether sysroot is set or not by using this command

$ arm-poky-linux-gnueabi-gcc -print-sysroot

And it gave output /not/exist it means sysroot is not set

So I have added --sysroot to my CFLAGS in Makefile and gave make

It gave the below errors

building .so.1.0

/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: cannot find crt1.o: No such file or directory

/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: cannot find crti.o: No such file or directory

/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: cannot find crtbegin.o: No such file or directory

/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: cannot find -lgcc

/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: cannot find -lgcc_s

/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: cannot find -lc

/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: cannot find -lgcc

/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: cannot find -lgcc_s

/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: cannot find crtend.o: No such file or directory

/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: cannot find crtn.o: No such file or directory

collect2: error: ld returned 1 exit status

make[1]: *** [.so.1.0] Error 1

make[1]: Leaving directory `/home/linux/MorphoSmart_SDK_6.13.2.0_linux/PC/Sdk_linux/GLOG'

make: *** [lib] Error 1

linux@ubuntu:~/MorphoSmart_SDK_6.13.2.0_linux/PC/Sdk_linux$

.o's are getting generated, but it is throwing error when it is trying to generate library

I don't have any other way to compile other than using Makefile. Because the project has so many source files in different folders.

Can anyone suggest where I am going wrong.

Labels (3)
1 Solution
10,325 Views
chandraevolute
Contributor V

Hi I solved my self. I changed the library path and sysroot path then it started working,

--sysroot=/home/fsl-release-bsp/build_image/tmp/sysroots/imx6ulevk

LIBPATH += -L/home/fsl-release-bsp/build_image/tmp/sysroots/imx6ulevk/usr/lib

View solution in original post

5 Replies
10,326 Views
chandraevolute
Contributor V

Hi I solved my self. I changed the library path and sysroot path then it started working,

--sysroot=/home/fsl-release-bsp/build_image/tmp/sysroots/imx6ulevk

LIBPATH += -L/home/fsl-release-bsp/build_image/tmp/sysroots/imx6ulevk/usr/lib

10,324 Views
chandraevolute
Contributor V

I found that the problem is with the dynamically linked libraries. If i use static libraries the application is compiling perfectly.

If i generate my own shared libraray and use it to compile a application then it is giving the below error

/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: skipping incompatible /opt/poky/1.8/sysroots/i686-pokysdk-linux/lib/libgcc_s.so.1 when searching for libgcc_s.so.1

/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: cannot find /lib/libc.so.6

/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: cannot find /usr/lib/libc_nonshared.a

/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: cannot find /lib/ld-linux-armhf.so.3

0 Kudos
10,324 Views
Yuri
NXP Employee
NXP Employee

Hello,


    First, environment should be set, and under this environment
makefile may be run. The following helps to setup the environment  :


cannot find crt1.o

Have a great day,
Yuri

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 Kudos
10,324 Views
chandraevolute
Contributor V

Hi Yuri​ I solved above issue by changing the --sysroot path and now I am getting new error

arm-poky-linux-gnueabi-gcc MSO_Version.o MSO_Connect.o MSO_errors.o -o bin/MSO_Version_shared -Wall -g -Os -fPIC -march=armv7-a -mfloat-abi=hard -mfpu=neon -mtune=cortex-a7 --sysroot=/home/fsl-release-bsp/build_image/tmp/sysroots/imx6ulevk -I../include -I../wsq -I/home/fsl-release-bsp/build_image/tmp/sysroots/imx6ulevk/usr/include/ -L/opt/poky/1.8/sysroots/cortexa7hf-vfp-neon-poky-linux-gnueabi/usr/lib -L../lib -L/opt/poky/1.8/sysroots/i686-pokysdk-linux/lib -L/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/lib -L/home/fsl-release-bsp/build_image/tmp/sysroots/imx6ulevk/usr/lib -lMSO -lMSOComm -lusb

/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: skipping incompatible /opt/poky/1.8/sysroots/i686-pokysdk-linux/lib/libgcc_s.so.1 when searching for libgcc_s.so.1

/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: cannot find /lib/libc.so.6

/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: cannot find /usr/lib/libc_nonshared.a

/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: cannot find /lib/ld-linux-armhf.so.3

collect2: error: ld returned 1 exit status

make[1]: *** [MSO_Version_shared] Error 1

make[1]: Leaving directory `/home/linux/ESYS-IMP-LINUXAPP-SUF-24092012-V0.01/Internal Release/ESYS-IMP-LinuxApp-SUF-LIB-SRS-V0.01/samples'

make: *** [samples] Error 2

what does this mean

/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: skipping incompatible /opt/poky/1.8/sysroots/i686-pokysdk-linux/lib/libgcc_s.so.1 when searching for libgcc_s.so.1

What might be the wrong??

0 Kudos
10,325 Views
chandraevolute
Contributor V

Hi ,

I followed the same steps still i am geeting the same issue.

I need to know one thing where the shared libraries will be present

Say like I am compiling a .c file $CC main.c -lpthread, from where the -lpthread reference is getting?? Where the -lpthread in arm-poky

0 Kudos