NDK 로 Graphite 2 컴 파일 하기
위의 이 말 은 Graphite 홈 페이지(http://scripts.sil.org/cms/scripts/page.php?site_id=projects&item_id=graphite_hom)에서 떼 어 낸 이 Open Source library 의 기능 에 대한 설명이것 은 Harfbuzz 와 유사 한 텍스트 shape 엔진 입 니 다.다만 shape 과정 에서 font 파일 에서 제공 하 는 정보 에 더욱 의존 할 것 입 니 다.미얀마 어 처리 에 있어 Graphite 엔진+Padauk font 파일 의 조합 방안 은 완벽 하 다 고 할 수 있다.
이 library 가 사용 하 는 API 도 대부분 standard C++의 범위 안에 있 기 때문에 NDK 로 이 library 를 컴 파일 하 는 데 좋 은 조건 을 만 들 었 습 니 다.
NDK 에서 STL 방법 을 사용 하면 Google 공식 문서(prebuilts/ndk/7/sources/cxx-stl/gnu-libstdc+/README)의 한 단락 을 볼 수 있 습 니 다.
이 글 에서 언급 한 것
application.mk 의 의 미 는 jni 라 는 folder 아래 원래 의 Android.mk 파일 을 바탕 으로 다른 이름 을 추가 해 야 한 다 는 것 입 니 다.
응용 프로그램.mk 파일.graphite 2 를 컴 파일 하기 위해 추 가 된 것 입 니 다.
응용 프로그램.mk 파일 에서 실제로 한 마디 만 할 수 있 습 니 다.
This directory contains the headers and prebuilt binaries for the
GNU libstdc++-v3 C++ Standard Template Library implementation.
These are generated from the toolchain sources by the rebuild-all-prebuilt.sh
script under build/tools.
To use it, define APP_STL to 'gnustl_static' in your Application.mk.
See docs/CPLUSPLUS-SUPPORT.html for more details.
This implementation fully supports C++ exceptions and RTTI.
이러한 module 을 컴 파일 하 는 또 다른 번 거 로 운 점 은 우리 가 소스 파일 list 에 몇 개의 소스 파일 을 추가 해 야 하 는 지 단번에 알 수 없다 는 것 이다.'Undefined reference to...'라 는 build error 정보 가 나 오지 않 을 때 까지 파일 을 하나씩 추가 할 수 밖 에 없 을 것 같 습 니 다.다음 Android.mk 파일 은 반복 적 인 링크 오류->source file 을 추가 하 는 과정 을 거 쳐 얻 은 결과 입 니 다.
APP_STL := gnustl_static
이 Android.mk 파일 중 하 나 는 같은 mk 파일 에서 두 library 에 대한 컴 파일 방법 을 정의 하 는 것 입 니 다.개인 적 으로 중요 한 것 은 include$(CLEARVARS)이 줄.그것 의 의 미 는 대체적으로 앞에서 정 의 된 모든 변 수 를 제거 하 는 것 이다.이렇게 하면 아마도 우 리 는 여러 개의 Android.mk 파일 을 하나 로 통합 하 는 데 편리 할 것 이다.
ndk-build 를 실행 하면 출력 은 아래 와 같 습 니 다.
# Copyright (C) 2009 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
HOME := /media/hanpfei
ANDROID_SOURCE_TOP=$(HOME)/LinData/android_src/JellyBean
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.cpp \
JniHelper.cpp\
JniDebug.cpp
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := graphite2
LOCAL_SRC_FILES := graphite2-1.2.0/src/Bidi.cpp \
graphite2-1.2.0/src/CachedFace.cpp \
graphite2-1.2.0/src/call_machine.cpp \
graphite2-1.2.0/src/CmapCache.cpp \
graphite2-1.2.0/src/Code.cpp \
graphite2-1.2.0/src/Face.cpp \
graphite2-1.2.0/src/FeatureMap.cpp \
graphite2-1.2.0/src/FileFace.cpp \
graphite2-1.2.0/src/Font.cpp \
graphite2-1.2.0/src/GlyphCache.cpp \
graphite2-1.2.0/src/GlyphFace.cpp \
graphite2-1.2.0/src/gr_face.cpp \
graphite2-1.2.0/src/gr_font.cpp \
graphite2-1.2.0/src/gr_logging.cpp \
graphite2-1.2.0/src/gr_slot.cpp \
graphite2-1.2.0/src/json.cpp \
graphite2-1.2.0/src/NameTable.cpp \
graphite2-1.2.0/src/Pass.cpp \
graphite2-1.2.0/src/SegCache.cpp \
graphite2-1.2.0/src/SegCacheEntry.cpp \
graphite2-1.2.0/src/SegCacheStore.cpp \
graphite2-1.2.0/src/Segment.cpp \
graphite2-1.2.0/src/Silf.cpp \
graphite2-1.2.0/src/Slot.cpp \
graphite2-1.2.0/src/Sparse.cpp \
graphite2-1.2.0/src/TtfUtil.cpp \
graphite2-1.2.0/src/UtfCodec.cpp
LOCAL_C_INCLUDES += \
$(LOCAL_PATH)/graphite2-1.2.0/src \
$(LOCAL_PATH)/graphite2-1.2.0/include
include $(BUILD_SHARED_LIBRARY)
End
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Visual Studio에서 파일 폴더 구분 (포함 경로 설정)Visual Studio에서 c, cpp, h, hpp 파일을 폴더로 나누고 싶었습니까? 어쩌면 대부분의 사람들이 있다고 생각합니다. 처음에 파일이 만들어지는 장소는 프로젝트 파일 등과 같은 장소에 있기 때문에 파일...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.