당신은 지금 당신이 좋아하는 것을 발견했을 수도 있지만 안드로이드에서 작동하는 단일 바이너리를 컴파일했습니다-당신이 말하고있는 손 흔들며 명령을 사용하는 것이 가능합니다-우분투 12.10에서 리눅스 소스를 크로스 컴파일하는 데 사용했습니다 안드로이드 NDK를 사용하고 코드를 약간 변경하면 이제 작동합니다. https://sites.google.com/site/keigoattic/ocaml-on-android 의 안내에 따라 몇 가지 작업을 수행해야합니다. unison 소스에 pty.c라는 파일이 있습니다. 다음 섹션을 찾으십시오.
// openpty
#if defined(__linux)
#include <pty.h>
/*#define HAS_OPENPTY 1*/
#endif
define HAS_OPENPTY 1
표시된대로 주석을 답니다 . 또한 ubase / util.ml을 열고 편집해야합니다.
let homeDir () =
System.fspathFromString "/Your path here"
여기에서 의견을 말하십시오 :
(if (osType = `Unix) || isCygwin then
safeGetenv "HOME"
else if osType = `Win32 then
(*We don't want the behavior of Unison to depends on whether it is run
from a Cygwin shell (where HOME is set) or in any other way (where
HOME is usually not set)
try System.getenv "HOME" (* Windows 9x with Cygwin HOME set *)
with Not_found ->
*)
try System.getenv "USERPROFILE" (* Windows NT/2K standard *)
with Not_found ->
try System.getenv "UNISON" (* Use UNISON dir if it is set *)
with Not_found ->
"c:/" (* Default *)
else
assert false (* osType can't be anything else *))
...여기로!
그런 다음 Makefile을 편집해야합니다.
CWD=$(shell pwd)
EXEC_EXT=
WINOBJS=
SYSTEM=generic
# openpty is in the libutil library
ifneq ($(OSARCH),solaris)
ifneq ($(OSARCH),osx)
# CLIBS+=-cclib -lutil
endif
endif
buildexecutable::
@echo Building for Unix
endif
endif
그리고 # CLIBS+=-cclib -lutil
그림과 같이 주석 처리하십시오.
그리고 모든 것이 효과가 있음을 기억할 수 있습니다. 한 번 컴파일 된 다른 단계는 안드로이드 시스템 파티션을 쓰기 가능으로 마운트하고 나머지 모든 쉘 명령이있는 / system 폴더에 단일 시스템을 복사하는 것입니다.
누군가에게 도움이되기를 바랍니다 ... 컴파일하는 데 많은 수면을 잃었습니다.