crypto++をandroid向けにビルドしました。
まず、qmakeで作ったMakefileをEmacsで開いて以下のマクロの記述を手作業でcrypto++のGNUmakefileの先頭にコピーしまsした。
CXX
CXXFLAGS
INCPATH
AR
RANLIB
私の場合は、以下です。
CXX = /opt/android-ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++
CXXFLAGS = -Wno-psabi -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -DANDROID -Wa,--noexecstack -std=gnu++0x -O2 -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -mthumb -Wall -Wno-psabi -W -D_REENTRANT -fPIE $(DEFINES)
INCPATH = -I/opt/Qt5.3.1_android/5.3/android_armv7/mkspecs/android-g++ -I. -I. -I../lib/cryptopp562 -I/opt/Qt5.3.1_android/5.3/android_armv7/include -I/opt/Qt5.3.1_android/5.3/android_armv7/include/QtMultimedia -I/opt/Qt5.3.1_android/5.3/android_armv7/include/QtWidgets -I/opt/Qt5.3.1_android/5.3/android_armv7/include/QtNetwork -I/opt/Qt5.3.1_android/5.3/android_armv7/include/QtGui -I/opt/Qt5.3.1_android/5.3/android_armv7/include/QtCore -I. -I. -I/opt/android-ndk-r9d/sources/cxx-stl/gnu-libstdc++/4.8/include -I/opt/android-ndk-r9d/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/include -I/opt/android-ndk/platforms/android-9/arch-arm/usr/include
AR = /opt/android-ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar
RANLIB = /opt/android-ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ranlib
で、元々の先頭行にあった
CXXFLAGS = -DNDEBUG -O3
の"="を"+="に変更、インクルードパスの設定を追加して
CXXFLAGS += -DNDEBUG -O3 $(INCPATH)
とします。これでCXXFLAGSに追加される形になります。
あと、CXXFLAGS +=-march=native となっているところはコメントアウトしました。native向けではなくarm向けにビルドするので。
ifneq ($(GCC42_OR_LATER),0)
ifeq ($(UNAME),Darwin)
CXXFLAGS += -arch x86_64 -arch i386
else
#CXXFLAGS += -march=native
endif
endif
で、大丈夫かなぁと思ってmakeすると以下の様なエラーが出ました。
In file included from network.cpp:5:0:
wait.h:184:2: error: 'fd_set' does not name a type
fd_set m_readfds, m_writefds;
manコマンドでfd_setを調べてみます。
man fd_set
まぁ、File Desctiptor関係ですね。androidだから、ファイルシステム周りは少し特殊そうですよね…
crypto++のライブラリには多くのクラスが入っているので、使っていなければビルド対象から外してもいいかなという判断でこのソースファイルを対象から外すことにしました。
GNUmakefileでnetwork.cppを探しますが、ありません。
SRCS = $(wildcard *.cpp)
と書いてあるので、カレントディレクトリにある".cpp"とついているファイルは全部対象になってるようです。
仕方ないので、network.cppをnetwork.cpp.backupとリネームして対象外としました。
あと、同様にwait.cppというファイルも同じエラーとなるのでwait.cpp.backupにリネームしました。
で、再度makeしてlibcryptopp.a が出来上がりました。
本体のディレクトリに戻り、makeを実行すると最後まで正常に終了しました。
しかし、qtbrynhildrというファイルはありません…makeコマンドのメッセージを確認すると
-o libqtbrynhildr.so
という部分があります。UNIX系での一般的なコマンドではなく libqtbrynhildr.so というダイナミックリンクライブラリのような名前でアプリケーションが出来上がるようです、初めて知りました(^-^;
さて、どうやって動作確認すればいいんでしょう…
最近のコメント