2016-06-18 2 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 

내가 정적 라이브러리 실행 파일로 컴파일 할 경우

을 제공하는 응용 프로그램에 연결을 위해 공유 라이브러리를 사용하려고 할 때 발생 얻고있다. 다음은 내 메이크

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) 

입니다 당신은 내가 두 실행 파일 정적 라이브러리 하나와 공유 라이브러리와 기타를 생성하고 볼 수 있습니다. poky 1.8을 사용 중이며 커널 2.6.38입니다. NXP IMX6ULEVK 보드 사용. 내가 당신 같은 아키텍처를 지정 잘못된

+1

장소? 그 i686 sysroot 특히; 거기에 ARM 코드가 있다고 상상할 수는 없습니다. 귀하의 목표에 대한 _ 실제 _ 근원적 인 루트는 어느 것입니까? – Notlikethat

+0

내 실제 sysroot는 sysroot =/home/fsl-release-bsp/build_image/tmp/sysroots/imx6ulevk입니다. LIBPATH를 가리켜 주셔서 감사합니다. 남은 LIBPATHS를 commnetd하고 작업을 시작했습니다. –

답변

2

하겠어 어디 사람은 말해 줄 수있는 ARMv7-A :

-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 
관련 문제