现在的位置: 首页 > 综合 > 正文

NDK编译Poco(二)

2018年02月11日 ⁄ 综合 ⁄ 共 8475字 ⁄ 字号 评论关闭

上次在linux下编译poco,比较麻烦,而且每次编译时都会报错,然后继续输入命令编译,反复几次后才能把库给编译完整。

于是这次采用了第二种方法编译:直接通过android.mk脚本编译。这种方式的好处是不用在linux环境下去编译,而且如果自己愿意折腾的话,可以只编译自己用到的功能,这样就大大减少了文件体积,而且通过脚本能更好的控制相关配置。

脚本在NDK r10d x64 + poco-1.4.7p1-all下编译测试通过。(其他版本可能需要微调参数)

两个文件,一个android.mk,一个build_android.bat

# poco-1.4.7p1-all

LOCAL_PATH := $(call my-dir)
STL_HOME := E:/Android/android-ndk-r10d/sources/cxx-stl/gnu-libstdc++/4.9

APP_STL := gnustl_shared

##### STL

include $(CLEAR_VARS)
LOCAL_MODULE := $(APP_STL)
LOCAL_SRC_FILES := $(STL_HOME)/libs/$(APP_ABI)/lib$(APP_STL).so
LOCAL_EXPORT_C_INCLUDES := $(STL_HOME)/libs/$(APP_ABI)/include
include $(PREBUILT_SHARED_LIBRARY)

##### PocoFoundation

include $(CLEAR_VARS)
LOCAL_MODULE   := PocoFoundation
LOCAL_CFLAGS   := -DPOCO_ANDROID -DPOCO_NO_FPENVIRONMENT -DPOCO_NO_WSTRING -DPOCO_NO_SHAREDMEMORY
LOCAL_CPPFLAGS := -std=c++11 -frtti -fexceptions
LOCAL_SHARED_LIBRARIES := gnustl_shared
LOCAL_C_INCLUDES += $(STL_HOME)/include \
	$(LOCAL_PATH)/Foundation/include

LOCAL_SRC_FILES := \
	Foundation/src/AbstractObserver.cpp \
    Foundation/src/ActiveDispatcher.cpp \
    Foundation/src/adler32.c \
    Foundation/src/ArchiveStrategy.cpp \
    Foundation/src/Ascii.cpp \
    Foundation/src/ASCIIEncoding.cpp \
    Foundation/src/AsyncChannel.cpp \
    Foundation/src/AtomicCounter.cpp \
    Foundation/src/Base64Decoder.cpp \
    Foundation/src/Base64Encoder.cpp \
    Foundation/src/BinaryReader.cpp \
    Foundation/src/BinaryWriter.cpp \
    Foundation/src/Bugcheck.cpp \
    Foundation/src/ByteOrder.cpp \
    Foundation/src/Channel.cpp \
    Foundation/src/Checksum.cpp \
    Foundation/src/Clock.cpp \
    Foundation/src/compress.c \
    Foundation/src/Condition.cpp \
    Foundation/src/Configurable.cpp \
    Foundation/src/ConsoleChannel.cpp \
    Foundation/src/CountingStream.cpp \
    Foundation/src/crc32.c \
    Foundation/src/DateTime.cpp \
    Foundation/src/DateTimeFormat.cpp \
    Foundation/src/DateTimeFormatter.cpp \
    Foundation/src/DateTimeParser.cpp \
    Foundation/src/Debugger.cpp \
    Foundation/src/deflate.c \
    Foundation/src/DeflatingStream.cpp \
    Foundation/src/DigestEngine.cpp \
    Foundation/src/DigestStream.cpp \
    Foundation/src/DirectoryIterator.cpp \
    Foundation/src/DynamicAny.cpp \
    Foundation/src/DynamicAnyHolder.cpp \
    Foundation/src/Environment.cpp \
    Foundation/src/ErrorHandler.cpp \
    Foundation/src/Event.cpp \
    Foundation/src/EventArgs.cpp \
    Foundation/src/Exception.cpp \
    Foundation/src/File.cpp \
    Foundation/src/FileChannel.cpp \
    Foundation/src/FileStream.cpp \
    Foundation/src/FileStreamFactory.cpp \
    Foundation/src/Format.cpp \
    Foundation/src/Formatter.cpp \
    Foundation/src/FormattingChannel.cpp \
    Foundation/src/FPEnvironment.cpp \
    Foundation/src/Glob.cpp \
    Foundation/src/Hash.cpp \
    Foundation/src/HashStatistic.cpp \
    Foundation/src/HexBinaryDecoder.cpp \
    Foundation/src/HexBinaryEncoder.cpp \
    Foundation/src/infback.c \
    Foundation/src/inffast.c \
    Foundation/src/inflate.c \
    Foundation/src/InflatingStream.cpp \
    Foundation/src/inftrees.c \
    Foundation/src/Latin1Encoding.cpp \
    Foundation/src/Latin2Encoding.cpp \
    Foundation/src/Latin9Encoding.cpp \
    Foundation/src/LineEndingConverter.cpp \
    Foundation/src/LocalDateTime.cpp \
    Foundation/src/LogFile.cpp \
    Foundation/src/Logger.cpp \
    Foundation/src/LoggingFactory.cpp \
    Foundation/src/LoggingRegistry.cpp \
    Foundation/src/LogStream.cpp \
    Foundation/src/Manifest.cpp \
    Foundation/src/MD4Engine.cpp \
    Foundation/src/MD5Engine.cpp \
    Foundation/src/MemoryPool.cpp \
    Foundation/src/MemoryStream.cpp \
    Foundation/src/Message.cpp \
    Foundation/src/Mutex.cpp \
    Foundation/src/NestedDiagnosticContext.cpp \
    Foundation/src/Notification.cpp \
    Foundation/src/NotificationCenter.cpp \
    Foundation/src/NotificationQueue.cpp \
    Foundation/src/NullChannel.cpp \
    Foundation/src/NullStream.cpp \
    Foundation/src/NumberFormatter.cpp \
    Foundation/src/NumberParser.cpp \
    Foundation/src/Path.cpp \
    Foundation/src/PatternFormatter.cpp \
    Foundation/src/pcre_chartables.c \
    Foundation/src/pcre_compile.c \
    Foundation/src/pcre_exec.c \
    Foundation/src/pcre_fullinfo.c \
    Foundation/src/pcre_globals.c \
    Foundation/src/pcre_maketables.c \
    Foundation/src/pcre_newline.c \
    Foundation/src/pcre_ord2utf8.c \
    Foundation/src/pcre_study.c \
    Foundation/src/pcre_tables.c \
    Foundation/src/pcre_try_flipped.c \
    Foundation/src/pcre_ucd.c \
    Foundation/src/pcre_valid_utf8.c \
    Foundation/src/pcre_xclass.c \
    Foundation/src/Pipe.cpp \
    Foundation/src/PipeImpl.cpp \
    Foundation/src/PipeStream.cpp \
    Foundation/src/PriorityNotificationQueue.cpp \
    Foundation/src/Process.cpp \
    Foundation/src/PurgeStrategy.cpp \
    Foundation/src/Random.cpp \
    Foundation/src/RandomStream.cpp \
    Foundation/src/RefCountedObject.cpp \
    Foundation/src/RegularExpression.cpp \
    Foundation/src/RotateStrategy.cpp \
    Foundation/src/Runnable.cpp \
    Foundation/src/RWLock.cpp \
    Foundation/src/Semaphore.cpp \
    Foundation/src/SHA1Engine.cpp \
    Foundation/src/SharedLibrary.cpp \
    Foundation/src/SharedMemory.cpp \
    Foundation/src/SignalHandler.cpp \
    Foundation/src/SimpleFileChannel.cpp \
    Foundation/src/SplitterChannel.cpp \
    Foundation/src/Stopwatch.cpp \
    Foundation/src/StreamChannel.cpp \
    Foundation/src/StreamConverter.cpp \
    Foundation/src/StreamCopier.cpp \
    Foundation/src/StreamTokenizer.cpp \
    Foundation/src/String.cpp \
    Foundation/src/StringTokenizer.cpp \
    Foundation/src/SynchronizedObject.cpp \
    Foundation/src/SyslogChannel.cpp \
    Foundation/src/Task.cpp \
    Foundation/src/TaskManager.cpp \
    Foundation/src/TaskNotification.cpp \
    Foundation/src/TeeStream.cpp \
    Foundation/src/TemporaryFile.cpp \
    Foundation/src/TextBufferIterator.cpp \
    Foundation/src/TextConverter.cpp \
    Foundation/src/TextEncoding.cpp \
    Foundation/src/TextIterator.cpp \
    Foundation/src/Thread.cpp \
    Foundation/src/ThreadLocal.cpp \
    Foundation/src/ThreadPool.cpp \
    Foundation/src/ThreadTarget.cpp \
    Foundation/src/TimedNotificationQueue.cpp \
    Foundation/src/Timer.cpp \
    Foundation/src/Timespan.cpp \
    Foundation/src/Timestamp.cpp \
    Foundation/src/Timezone.cpp \
    Foundation/src/Token.cpp \
    Foundation/src/trees.c \
    Foundation/src/UnicodeConverter.cpp \
    Foundation/src/Unicode.cpp \
    Foundation/src/URI.cpp \
    Foundation/src/URIStreamFactory.cpp \
    Foundation/src/URIStreamOpener.cpp \
    Foundation/src/UTF8Encoding.cpp \
    Foundation/src/UTF8String.cpp \
    Foundation/src/UTF16Encoding.cpp \
    Foundation/src/UUID.cpp \
    Foundation/src/UUIDGenerator.cpp \
    Foundation/src/Void.cpp \
    Foundation/src/Windows1250Encoding.cpp \
    Foundation/src/Windows1251Encoding.cpp \
    Foundation/src/Windows1252Encoding.cpp \
    Foundation/src/zutil.c

include $(BUILD_SHARED_LIBRARY)

##### PocoData

include $(CLEAR_VARS)
LOCAL_MODULE   := PocoData
LOCAL_CFLAGS   := -DPOCO_ANDROID -DPOCO_NO_FPENVIRONMENT -DPOCO_NO_WSTRING -DPOCO_NO_SHAREDMEMORY
LOCAL_CPPFLAGS := -std=c++11 -frtti -fexceptions
LOCAL_SHARED_LIBRARIES := gnustl_shared PocoFoundation
LOCAL_C_INCLUDES += $(STL_HOME)/include \
	$(LOCAL_PATH)/Foundation/include \
	$(LOCAL_PATH)/Data/include

LOCAL_SRC_FILES := \
    Data/src/AbstractBinder.cpp \
	Data/src/AbstractBinding.cpp \
	Data/src/AbstractExtraction.cpp \
	Data/src/AbstractExtractor.cpp \
	Data/src/AbstractPreparation.cpp \
	Data/src/AbstractPrepare.cpp \
	Data/src/BLOB.cpp \
	Data/src/BLOBStream.cpp \
	Data/src/Connector.cpp \
	Data/src/DataException.cpp \
	Data/src/Limit.cpp \
	Data/src/MetaColumn.cpp \
	Data/src/PooledSessionHolder.cpp \
	Data/src/PooledSessionImpl.cpp \
	Data/src/Range.cpp \
	Data/src/RecordSet.cpp \
	Data/src/Session.cpp \
	Data/src/SessionFactory.cpp \
	Data/src/SessionImpl.cpp \
	Data/src/SessionPool.cpp \
	Data/src/Statement.cpp \
	Data/src/StatementCreator.cpp \
	Data/src/StatementImpl.cpp

include $(BUILD_SHARED_LIBRARY)

##### PocoDataSQLite

include $(CLEAR_VARS)
LOCAL_MODULE   := PocoDataSQLite
LOCAL_CFLAGS   := -DPOCO_ANDROID -DPOCO_NO_FPENVIRONMENT -DPOCO_NO_WSTRING -DPOCO_NO_SHAREDMEMORY
LOCAL_CFLAGS   += \
    -DSQLITE_THREADSAFE=1 \
	-DSQLITE_DISABLE_LFS \
	-DSQLITE_OMIT_UTF16 \
	-DSQLITE_OMIT_PROGRESS_CALLBACK \
	-DSQLITE_OMIT_COMPLETE \
	-DSQLITE_OMIT_TCL_VARIABLE \
	-DSQLITE_OMIT_DEPRECATED \
	-DSQLITE_OMIT_WAL \
	-DSQLITE_OMIT_LOAD_EXTENSION \
	-DSQLITE_HOMEGROWN_RECURSIVE_MUTEX \
	-DOS_VXWORKS=551
LOCAL_CPPFLAGS := -std=c++11 -frtti -fexceptions
LOCAL_SHARED_LIBRARIES := gnustl_shared PocoFoundation PocoData
LOCAL_C_INCLUDES += $(STL_HOME)/include \
	$(LOCAL_PATH)/Foundation/include \
	$(LOCAL_PATH)/Data/include \
	$(LOCAL_PATH)/Data/SQLite/include

LOCAL_SRC_FILES := \
    Data/SQLite/src/Binder.cpp \
	Data/SQLite/src/Connector.cpp \
	Data/SQLite/src/Extractor.cpp \
	Data/SQLite/src/SQLiteException.cpp \
	Data/SQLite/src/SQLiteStatementImpl.cpp \
	Data/SQLite/src/SessionImpl.cpp \
	Data/SQLite/src/Utility.cpp \
	Data/SQLite/src/sqlite3.c

include $(BUILD_SHARED_LIBRARY)

注意:下面的%NDK_HOME%是ndk根目录路径。

cd /d %~dp0

set NDK_PROJECT_PATH=.
set APP_ABI=armeabi
set NDK_TOOLCHAIN_VERSION=4.9
set APP_PLATFORM=android-8
set APP_OPTIM=release
set NDK_DEBUG=0

%NDK_HOME%\ndk-build.cmd APP_BUILD_SCRIPT=%NDK_PROJECT_PATH%\Android.mk NDK_TOOLCHAIN_VERSION=%NDK_TOOLCHAIN_VERSION% APP_ABI=%APP_ABI% APP_PLATFORM=%APP_PLATFORM% APP_OPTIM=%APP_OPTIM% NDK_DEBUG=%NDK_DEBUG% NDK_PROJECT_PATH=%NDK_PROJECT_PATH%

编译的所有参数在这两个文件中修改。要增加编译的模块直接在android.mk中添加。

最后将两个文件放在poco根目录下,运行批处理开始编译,等待编译完成后在libs目录下就是最终的二进制文件了。

抱歉!评论已关闭.