ocaml 보정 애플리케이션과 함께 제공되는 터치 스크린 드라이버를 크로스 컴파일하고 있습니다.ARM 용 ocaml 앱 상호 컴파일
저는 Angström을 실행하는 Beagleboard와 같은 ARM 드라이버와 응용 프로그램을 컴파일하려고합니다.
그것은 다음과 같이 진행됩니다
^_^[[email protected] zytouch-driver-20081121]$ source /usr/local/angstrom/arm/environment-setup
^_^[[email protected] zytouch-driver-20081121]$ make CC=arm-angstrom-linux-gnueabi-gcc
arm-angstrom-linux-gnueabi-gcc -std=gnu99 -g -O2 -Wall -Wextra -Werror -Wstrict-prototypes -Wmissing-prototypes -c -o daemon/config.o daemon/config.c
arm-angstrom-linux-gnueabi-gcc -std=gnu99 -g -O2 -Wall -Wextra -Werror -Wstrict-prototypes -Wmissing-prototypes -c -o daemon/util.o daemon/util.c
arm-angstrom-linux-gnueabi-gcc -std=gnu99 -g -O2 -Wall -Wextra -Werror -Wstrict-prototypes -Wmissing-prototypes -c -o daemon/debug.o daemon/debug.c
arm-angstrom-linux-gnueabi-gcc -std=gnu99 -g -O2 -Wall -Wextra -Werror -Wstrict-prototypes -Wmissing-prototypes -c -o daemon/zytouch_usb.o daemon/zytouch_usb.c
arm-angstrom-linux-gnueabi-gcc -std=gnu99 -g -O2 -Wall -Wextra -Werror -Wstrict-prototypes -Wmissing-prototypes -c -o daemon/zytouchd.o daemon/zytouchd.c
arm-angstrom-linux-gnueabi-gcc daemon/config.o daemon/util.o daemon/debug.o daemon/zytouch_usb.o daemon/zytouchd.o -lX11 -lXtst -lusb -lm -o zytouch-daemon
ocamlopt -cc arm-angstrom-linux-gnueabi-gcc -cclib -lcairo -cclib -lextlib -cclib -llablgtk2 -warn-error A -c -I +lablgtk2 -I +cairo -I +extlib -I calibrate calibrate/version.ml -o calibrate/version.cmx
ocamlopt -cc arm-angstrom-linux-gnueabi-gcc -cclib -lcairo -cclib -lextlib -cclib -llablgtk2 -warn-error A -c -I +lablgtk2 -I +cairo -I +extlib -I calibrate calibrate/util.ml -o calibrate/util.cmx
ocamlopt -cc arm-angstrom-linux-gnueabi-gcc -cclib -lcairo -cclib -lextlib -cclib -llablgtk2 -warn-error A -c -I +lablgtk2 -I +cairo -I +extlib -I calibrate calibrate/config.ml -o calibrate/config.cmx
ocamlopt -cc arm-angstrom-linux-gnueabi-gcc -cclib -lcairo -cclib -lextlib -cclib -llablgtk2 -warn-error A -c -I +lablgtk2 -I +cairo -I +extlib -I calibrate calibrate/orientation.ml -o calibrate/orientation.cmx
ocamlopt -cc arm-angstrom-linux-gnueabi-gcc -cclib -lcairo -cclib -lextlib -cclib -llablgtk2 -warn-error A -c -I +lablgtk2 -I +cairo -I +extlib -I calibrate calibrate/tscalibrate.ml -o calibrate/tscalibrate.cmx
ocamlopt -cc arm-angstrom-linux-gnueabi-gcc -cclib -lcairo -cclib -lextlib -cclib -llablgtk2 -warn-error A -cc arm-angstrom-linux-gnueabi-gcc -cclib -lcairo -cclib -lextlib -cclib -llablgtk2 -warn-error A -I +lablgtk2 -I +cairo -I +extlib -I calibrate extLib.cmxa str.cmxa unix.cmxa lablgtk.cmxa cairo_lablgtk.cmxa cairo.cmxa gtkInit.cmx calibrate/version.cmx calibrate/util.cmx calibrate/config.cmx calibrate/orientation.cmx calibrate/tscalibrate.cmx -o zytouch-calibrate
/usr/local/angstrom/arm/lib/gcc/arm-angstrom-linux-gnueabi/4.3.3/../../../../arm-angstrom-linux-gnueabi/bin/ld: /tmp/camlstartup71ef32.o: Relocations in generic ELF (EM: 3)
/usr/local/angstrom/arm/lib/gcc/arm-angstrom-linux-gnueabi/4.3.3/../../../../arm-angstrom-linux-gnueabi/bin/ld: /tmp/camlstartup71ef32.o: Relocations in generic ELF (EM: 3)
/tmp/camlstartup71ef32.o: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
File "caml_startup", line 1, characters 0-1:
Error: Error during linking
make: *** [zytouch-calibrate] Error 2
내가 그 Relocations in generic ELF (EM: 3)
오류가 붙어있어.
(...)
OFLAGS = -cc ${CC} -cclib -lcairo -cclib -lextlib -cclib -llablgtk2 -warn-error A
OCAMLOPT = ocamlopt $(OFLAGS)
OCAML_INC = -I +lablgtk2 -I +cairo -I +extlib -I calibrate
OCAML_LIBS = $(OCAML_INC) extLib.cmxa str.cmxa unix.cmxa lablgtk.cmxa cairo_lablgtk.cmxa cairo.cmxa gtkInit.cmx
(...)
config.cmx: util.cmx
orientation.cmx: config.cmx
tscalibrate.cmx: version.cmx util.cmx orientation.cmx config.cmx
%.cmx : %.ml
$(OCAMLOPT) -c $(OCAML_INC) $< -o [email protected]
%.mli : %.ml
$(OCAMLC) -i $(OCAML_INC) $+
내 PATH의 첫 번째 요소로 잎 /usr/local/angstrom/arm/bin
/usr/local/angstrom/arm/environment-setup
, 나는이 교체 한 후,
sudo ln -s /usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-ar /usr/local/angstrom/arm/bin/ar
sudo ln -s /usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-as /usr/local/angstrom/arm/bin/as
sudo ln -s /usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-ld /usr/local/angstrom/arm/bin/ld
그러나 ARM 버전에서 일부 프로그램을 대체하려고 :
makefile은 다음과 같습니다 as
, 모듈도 컴파일되지 않습니다.
ocamlopt -cc arm-angstrom-linux-gnueabi-gcc -cclib -lcairo -cclib -lextlib -cclib -llablgtk2 -warn-error A -c -I +lablgtk2 -I +cairo -I +extlib -I calibrate calibrate/version.ml -o calibrate/version.cmx
/tmp/camlasm41bb77.s: Assembler messages:
/tmp/camlasm41bb77.s:31: Error: alignment too large: 15 assumed
/tmp/camlasm41bb77.s:35: Error: bad instruction `movl $camlVersion__3,%eax'
/tmp/camlasm41bb77.s:36: Error: bad instruction `movl %eax,camlVersion'
/tmp/camlasm41bb77.s:37: Error: bad instruction `movl $camlVersion__2,%eax'
/tmp/camlasm41bb77.s:38: Error: bad instruction `movl %eax,camlVersion+4'
/tmp/camlasm41bb77.s:39: Error: bad instruction `movl $camlVersion__1,%eax'
/tmp/camlasm41bb77.s:40: Error: bad instruction `movl %eax,camlVersion+8'
/tmp/camlasm41bb77.s:41: Error: bad instruction `movl $1,%eax'
/tmp/camlasm41bb77.s:42: Error: bad instruction `ret'
/tmp/camlasm41bb77.s:43: Error: unrecognized symbol type ""
File "calibrate/version.ml", line 1, characters 0-1:
Error: Assembler error, input left in file /tmp/camlasm41bb77.s
make: *** [calibrate/version.cmx] Error 2
나는 그것이 매우 어리석은 오류 여야한다고 확신하지만이 작업을 올바르게 수행하는 방법에 대한 문서를 찾을 수 없다. 누가 실패 할 수 있는지 아는 사람 있습니까?
빌드하려고하는 드라이버의 소스 코드는 here입니다.
Angstrom 배포판에 ocaml 패키지가 없으므로 첫 번째 옵션을 시도하고 있습니다. 그러나, 나는 데비안 Squeeze ARM 머신에서 ocamlopt를 찾을 수없는 것 같습니다. (그들은 쉽게 찾을 수 있습니다. [http://people.debian.org/~aurel32/qemu/armel/]) . [this] (http://old.nabble.com/Bug-377499%3A-ocaml-nox%3A-usr-bin-ocamlopt-missing-in-ocaml-nox_3.09.2-5_s390.deb -td5243672.html), ocamlopt는 ARM에서 사용할 수 없기 때문에 조금 더 슬픈 날이되었습니다. 이 문제를 해결할 방법이 있습니까? – RazZziel
ocaml in squeeze (3.11.2) 실제로 ARM에는 ocamlopt가 없지만 3.12.1에서는 테스트 저장소를 활성화하거나 소스에서 빌드합니다 (매우 쉽습니다). 또한 다음 ocaml 릴리스에는 새로운 암 코드 생성기가 있습니다. 이는 이미 용감한 마음으로 svn 트렁크에서 사용할 수 있습니다. – ygrek
매력처럼 작동했습니다, 고마워요! – RazZziel