2012-09-27 2 views
0

나는 arm-linux-androideabi-gcc 컴파일러를 사용하여 C로 작성한 하나의 공유 라이브러리를 가지고 있으므로 공유 라이브러리 (.so)를 호출하고 하나의 샘플을 작성하여 공유 라이브러리를 테스트하려고한다. 나는이 같은 오류를 가지고 컴파일 할 때 .EXE, 그래서 이것은 내 메이크 파일입니다arm-linux-androideabi-gcc를 사용하여 실행 파일 (.exe)을 만드는 방법은 무엇입니까?

 TARG_OS  = WIN32 
BUILDTYPE  = Debug 
OS_BITS = 32  

SRC  := TestLSBioCore.c 



OBJS = $(SRC:.c=.o) 

OUT   = ./Test.exe 

OUTLIB  = 

INCLUDE  = -I../../../../../../../android-ndk-r8b/platforms/android-8/arch-arm/usr/include -I../../include 

LIBS  = libLSBioCore.so 



# C++ compiler flags (-g -O2 -Wall) 
#CCFLAGS = -O2 -w -ansi -D_POSIX_SOURCE 

CCFLAGS  = -O2 -w -D_POSIX_SOURCE 

DEFS  = "-D __MSYS__" "-D__NBISLE__" 

#LDFLAGS 
CFLAGS = -nostdlib 
LDFLAGS =-Wl,-rpath-link=../../../../../../../android-ndk-r8b/platforms/android-8/arch-arm/usr/lib/ -L../../../../../../../android-ndk-r8b/platforms/android-8/arch-arm/usr/lib/ 
LIB = -lc -lm 

OBJECT = ../../../../../../../android-ndk-r8b/platforms/android-8/arch-arm/usr/lib/crtbegin_dynamic.o \ 
../../../../../../../android-ndk-r8b/platforms/android-8/arch-arm/usr/lib/crtend_android.o 




#compiler 
#CCC  = mingw32-gcc 

CCC   = arm-linux-androideabi-gcc 

#Archive 
#AR = ar 
#AR = /cygdrive/f/android-ndk-r8b/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-ar 

AR = arm-linux-androideabi-ar 
.SUFFIXES: .c 

default: dep $(OUT) 

.c.o: 
    $(CCC) -c $(CCFLAGS) $(INCLUDE) $(DEFS) $< -o [email protected] 

$(OUT): $(OBJS) 
    $(CCC) -o $(OUT) $(OBJECT) $(OBJS) $(LIBS) $(CFLAGS) $(LDFLAGS) $(LIB) 
    #$(AR) rcs $(OUTLIB) $(OBJS) 
    rm -f $(OBJS) 

depend: dep 

dep: 
# makedepend -- $(CFLAGS) -- $(INCLUDES) $(SRC) 

clean: 
    del $(OBJS) $(OUT) 

내가 가지고 다음과 같은 오류

 libLSBioCore.so: undefined reference to `__aeabi_dcmple' 
     libLSBioCore.so: undefined reference to `__aeabi_fadd' 
     libLSBioCore.so: undefined reference to `__aeabi_fcmpgt' 
     libLSBioCore.so: undefined reference to `__aeabi_i2f' 
     libLSBioCore.so: undefined reference to `__aeabi_dcmplt' 
     libLSBioCore.so: undefined reference to `__aeabi_ddiv' 
     libLSBioCore.so: undefined reference to `__aeabi_dmul' 
     libLSBioCore.so: undefined reference to `__aeabi_d2f' 
     libLSBioCore.so: undefined reference to `__aeabi_fsub' 
     libLSBioCore.so: undefined reference to `__aeabi_fcmpge' 
     libLSBioCore.so: undefined reference to `__aeabi_dadd' 
     libLSBioCore.so: undefined reference to `__aeabi_idiv' 
     libLSBioCore.so: undefined reference to `__aeabi_dcmpgt' 
     libLSBioCore.so: undefined reference to `__aeabi_dcmpge' 
     libLSBioCore.so: undefined reference to `__aeabi_dsub' 
     libLSBioCore.so: undefined reference to `__aeabi_f2iz' 
     libLSBioCore.so: undefined reference to `__aeabi_fdiv' 
     libLSBioCore.so: undefined reference to `__aeabi_i2d' 
     libLSBioCore.so: undefined reference to `__aeabi_fcmpeq' 
     libLSBioCore.so: undefined reference to `__aeabi_fmul' 
     libLSBioCore.so: undefined reference to `__aeabi_fcmplt' 
     libLSBioCore.so: undefined reference to `__aeabi_dcmpeq' 
     libLSBioCore.so: undefined reference to `__aeabi_f2uiz' 
     libLSBioCore.so: undefined reference to `__aeabi_d2iz' 
     libLSBioCore.so: undefined reference to `__aeabi_f2d' 
     libLSBioCore.so: undefined reference to `__aeabi_idivmod' 
     collect2: ld returned 1 exit status 
     Makefile:57: recipe for target `Test.exe' failed 

난, 난 내 화장에 적절한 링크를 준 희망 수 있습니다,이 뒤에 무엇이 오류를 얻을 사람이 어떻게 exe를 만드는 방법에 대한 아이디어가 팔 - 리눅스 - androideabi - gcc를 사용합니다.

+0

레코드의 경우 .exe가 아닙니다. 독립 실행 형 실행 파일이지만 Linux 규칙에 따라 확장되지 않습니다. –

답변

2

복잡한 방법을 선택했습니다. ndk-build을 사용하면 훨씬 쉽게 실행 파일을 빌드 할 수 있습니다. 예를 들어, test-libstdC++ NDK 샘플을보십시오.

그러나 노출 된 을 사용하면을 만들 수도 있습니다. 명령 행에 -nostdlib을 설정할 때 더 많은 라이브러리가 필요합니다.

-lgcc을 추가하십시오. 더 많은 참조를 만족 시키려면 toolchains/arm-linux-androideabi-4.6/prebuilt/windows/lib/gcc/arm-linux-androideabi/4.6.x-google에서 더 많은 라이브러리가 필요할 수 있습니다.

관련 문제