undefined reference to `__fixdfsi' 은 무슨 뜻인지 ,,, 그리고 솔루션을 좀 알려주시면 대단히 감사하겠습니다.
제가 make 명령을 쳤을 때, 이런 에러 로그가 나왔습니다.
그래서 제가 구글링을 해보지 않았겠습니까?
float에 무슨 문제가 있다고 하는데요,,, 어떻게 해야 문제가 해결 될까요?
(저는 우분투에서 크로스 툴체인을 이용하여 ppc용 소스를 빌드 하고 있습니다.)
-- 고수님들!!!! 고수님의 한마디 답변이 절실히 필요합니다. --
...
[LD] misc.lo OK
[CC] rand.c OK
[CC] free.c OK
[CC] malloc.c OK
[CC] calloc.c OK
[LD] stdlib.lo OK
[LD] libc.lo OK
[AR] libpok.a OK
Assemble partition part1.elf /usr/bin/powerpc-linux-gnuspe-ld -T /home/eslab/Desktop/Source/etri-pok/trunk/misc/ldscripts/ppc/prep/partition.lds main.o activity.o subprograms.o gtypes.o hello1.o -o part1.elf -L/home/eslab/Desktop/Source/etri-pok/trunk/libpok -lpok -Map part1.elf.map
/home/eslab/Desktop/Source/etri-pok/trunk/libpok/libpok.a(libc.lo)(.text+0x274): In function `print_float':
/home/eslab/Desktop/Source/etri-pok/trunk/libpok/libc/stdio/printf.c:159: undefined reference to `__fixdfsi'
/home/eslab/Desktop/Source/etri-pok/trunk/libpok/libpok.a(libc.lo)(.text+0x2ac):/home/eslab/Desktop/Source/etri-pok/trunk/libpok/libc/stdio/printf.c:166: undefined reference to `__floatsidf'
/home/eslab/Desktop/Source/etri-pok/trunk/libpok/libpok.a(libc.lo)(.text+0x2c8):/home/eslab/Desktop/Source/etri-pok/trunk/libpok/libc/stdio/printf.c:171: undefined reference to `__subdf3'
/home/eslab/Desktop/Source/etri-pok/trunk/libpok/libpok.a(libc.lo)(.text+0x2d8):/home/eslab/Desktop/Source/etri-pok/trunk/libpok/libc/stdio/printf.c:171: undefined reference to `__floatsidf'
/home/eslab/Desktop/Source/etri-pok/trunk/libpok/libpok.a(libc.lo)(.text+0x2ec):/home/eslab/Desktop/Source/etri-pok/trunk/libpok/libc/stdio/printf.c:171: undefined reference to `__muldf3'
/home/eslab/Desktop/Source/etri-pok/trunk/libpok/libpok.a(libc.lo)(.text+0x2f0):/home/eslab/Desktop/Source/etri-pok/trunk/libpok/libc/stdio/printf.c:171: undefined reference to `__fixunsdfsi'
make[1]: *** [part1.elf] 오류 1
make: *** [partitions] 오류 2
실시간으로 확인중 입니다.
머 필요하신 정보가 있으시면 바로 바로 올려 드리겠습니다.
================================================================================================================================================================================
+추가 내용
libpok.a가 ok가 나왔으니, 잘만들어 진 건가요??
아니면, `__fixdfsi' `__floatsidf' 등등을 생략하고 만든 것인가요??
그리고,,, 저는 rpm으로 크로스 컴파일러를 설치하였는데요,,,
path같은것을 잡아 주어야 하나요?? 보니깐 /opt/mtmk/usr/local/powerpc-linux- ....
여기에 깔려 있더라고요,,, 그래서 make 할 때 헤더파일을 못찾는 다는 에러가 한번 나와서요,
제가 gcc가 깔려 있는 폴더에 가서 헤더 파일을 복사해서 제가 돌리고자 하는 소스에 붙여넣기를 한적이 있습니다.
그리고
rm /usr/bin/gcc
ln -s /opt/mtmk/usr/local/powerpc-linux- .... /bin/powepc-linux-.... /usr/bin/gcc
위 명령어를 치고 다시 make를 하니깐 저기 에러가 뜨기전까지 돌았습니다.(ㅜ,ㅜ)
제가 리눅스에 익숙치가 않아,,,
초보적인 질문일 수도 있습니다.
Floating point를 지원하지 않는
Floating point를 지원하지 않는 하드웨어에서
이를 사용하려면 floating point emulation이 필요합니다.
libgcc 빌드할 때 영향도 좀 있고 해서 당장 해결해드릴 수는 없겠지만;
http://gcc.gnu.org/onlinedocs/gccint/Soft-float-library-routines.html
여기 참고하시고 혹시 모르니 -msoft-float 옵션도 줘보세요.
그래도 안되면 gcc 빌드할 때(정확힌 configure할 때) 옵션을 좀 줘야할 겁니다. (가물가물)
답변을 달아주시다니, 정말 감사합니다.
하지만, -msoft-float 옵션을 주어도,,, 해결이 돼지는 않았습니다. ㅜ,ㅜ
좀더 tip을 들을 수 있을까요 ??
부탁 드립니다.
gcc 빌드 할 때에 대한 팁
ld 할때 -msoft-float -lgcc
옵션을 다 주어 봤지만,,,
여전히 해결이 안돼네요 ,,,
좀더 조언을 해주실것이 있다면
부탁드립니다.
안될때는 어떤 오류 메시지가 나올겁니다. 그걸
안될때는 어떤 오류 메시지가 나올겁니다. 그걸 써주셔야지 뭐가 문제인지 알 수 있지요.
ld 옵션에 -lgcc 옵션도 함께 추가해보세요.
ld 옵션에 -lgcc 옵션도 함께 추가해보세요.
AR_ppc=/usr/bin/powerpc-linux
AR_ppc=/usr/bin/powerpc-linux-gnuspe-ar rcs
AR_x86=/usr/bin/ar rcs
AWK=/usr/bin/gawk
CAT=/bin/cat
CC_ppc=/usr/bin/powerpc-linux-gnuspe-gcc
CC_x86=/usr/bin/gcc
CD=cd
CONFIG_CFLAGS=-W -Wall -g -m32
CONFIG_LDFLAGS=--warn-common -msoft-float -lgcc
CONFIG_QEMU_x86= -fda $(ETRI_POK_PATH)/misc/grub-boot-only.img
COPY=/bin/cp
CP=/bin/cp
CXX_x86=/usr/bin/g++
ECHO=/bin/echo
ELF_MODE=elf_i386
GREP=/bin/grep
GZIP=/bin/gzip
INSTRUMENTATION=0
KILL=/bin/kill
LD_ppc=/usr/bin/powerpc-linux-gnuspe-ld
config 파일의 일부인데요,,,
CONFIG_LDFLAGS=--warn-common -msoft-float -lgcc
여기서 이렇게 옵션을 주는 것이 맞는 것인지요??
LDflag라고 나온 키워드는 이 것 뿐이라서요.
저에게 묻지 마시고 일단 직접 실행해보세요.
저에게 묻지 마시고 일단 직접 실행해보세요. libgcc.a static 라이브러리에 소프트웨어 실수연산에 필요한 각종 루틴이 들어있습니다.
-lgcc하면 오류가 어떻게 바뀌는지 확인해보시라는 것입니다.
LD_ppc=/usr/bin/powerpc-linux-gnuspe-ld -lgcc 라고 해도 될 수 있습니다.
댓글 달기