2016-06-18 17 views
0

GCCでコンパイルして実行する既存のアプリケーションがあります。 私は同じアプリケーションをクロスコンパイルしています。私はクロスコンパイルして共有ライブラリを生成できます。しかし、私はそれが私が静的ライブラリの実行ファイルをコンパイルした場合に生成なっている次のエラーに共有ライブラリを使用したアプリケーションのクロスコンパイル

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 

を与えているアプリケーションにリンクする共有ライブラリを使用しようとします。以下は私のmakefileです

export CROSS_COMPILE 

CC = $(CROSS_COMPILE)gcc 

ifeq ($(DEBUG),yes) 
CFLAGS = -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 


else 
CFLAGS = -Wall -Os -fPIC -march=armv7-a -mfloat-abi=hard -mfpu=neon -mtune=cortex-a7 --sysroot=/home/fsl-release-bsp/build_image/tmp/sysroots/imx6ulevk 


endif 

LIB_USB = -lusb 
LIB_SDL = -lSDL -lSDL_ttf 

LIBPATH += -L/opt/poky/1.8/sysroots/cortexa7hf-vfp-neon-poky-linux-gnueabi/usr/lib 
LIBPATH += -L../lib 
LIBPATH += -L/opt/poky/1.8/sysroots/i686-pokysdk-linux/lib 
LIBPATH += -L/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/lib 
LIBPATH += -L/home/fsl-release-bsp/build_image/tmp/sysroots/imx6ulevk/usr/lib 
LIB_STATIC_SAGEM = ../lib/libMSO.a ../lib/libMSOComm.a 
LIB_SAGEM = -lMSO -lMSOComm 


SRCINCLUDE += -I../include -I../wsq 
SRCINCLUDE += -I/home/fsl-release-bsp/build_image/tmp/sysroots/imx6ulevk/usr/include/ 

EXEC_PATH = bin 
EXEC_STATIC = MSO_Version #MSO_TestBio MSO_TestThread 
EXEC_SHARED = MSO_Version_shared #MSO_TestBio_shared 

MSO_Version_SRC = MSO_Version.c MSO_Connect.c MSO_errors.c 
MSO_Version_OBJ = $(MSO_Version_SRC:.c=.o) 

.PHONY: all 
all: $(EXEC_STATIC) $(EXEC_SHARED) 

%.o: %.c 
     $(CC) -c $(CFLAGS) $(SRCINCLUDE) $< -o [email protected] 

.PHONY: MSO_Version MSO_Version_shared 
MSO_Version: $(MSO_Version_OBJ) 
     $(CC) $(MSO_Version_OBJ) -o $(EXEC_PATH)/MSO_Version $(CFLAGS) $(SRCINCLUDE) $(LIB_STATIC_SAGEM) $(LIB_USB) 
MSO_Version_shared: $(MSO_Version_OBJ) 
     $(CC) $(MSO_Version_OBJ) -o $(EXEC_PATH)/MSO_Version_shared $(CFLAGS) $(SRCINCLUDE) $(LIBPATH) $(LIB_SAGEM) $(LIB_USB) 

私は静的ライブラリと他の共有ライブラリを持つ2つの実行可能ファイルを生成しています。 私はpoky 1.8を使用しており、カーネルは2.6.38です。 NXP IMX6ULEVKボードの使用。私はあなたのようにアーキテクチャを指定して、間違った

+1

場所?そのi686のsysroot特に;そこにはARMコードがないとは思いません。あなたのターゲットのための_実際のsysrootはどれですか? – Notlikethat

+0

実際のsysrootはsysroot =/home/fsl-release-bsp/build_image/tmp/sysroots/imx6ulevkです。 LIBPATHを指摘していただきありがとうございます、私は残りのLIBPATHSをコミットし、作業を開始しました。 –

答えて

2

つもりどこ は、誰も私を伝えることができたARMv7-:

-march=armv7-a 

が、i686のライブラリへのリンク:

LIBPATHsは、以上のすべてであるとまでは何
-L/opt/poky/1.8/sysroots/i686-pokysdk-linux/lib -L/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/lib 
関連する問題