ファイル システム上の現在の実行可能ファイルと現在のモジュールを見つけるための 2 つのファイル ライブラリをドロップインします。
サポートされているプラットフォーム:
窓
Linux
マック
iOS
アンドロイド
QNX ニュートリノ
FreeBSD
NetBSD
ドラゴンフライ BSD
SunOS
OpenBSD
whereami.h
とwhereami.c
ビルドにドロップするだけで開始できます。 (コンパイルのカスタマイズも参照してください)
wai_getExecutablePath()
それを囲んでいる実行可能ファイルのパスを返します。
wai_getModulePath()
それを囲んでいるモジュールのパスを返します。
使用例:
最初の呼び出しint length = wai_getExecutablePath(NULL, 0, NULL);
パスの長さを取得するには
path = (char*)malloc(length + 1);
で宛先バッファを割り当てます。
wai_getExecutablePath(path, length, &dirname_length)
再度呼び出してパスを取得します
path[length] = '�' で終端NUL
文字を追加しますpath[length] = '�';
例の出力は次のとおりです。
$ make -j -C _gnu-make $ cp ./bin/mac-x86_64/library.dylib /tmp/ $ ./bin/mac-x86_64/executable --load-library=/tmp/library.dylib executable path: /Users/gregory/Projects/whereami/bin/mac-x86_64/executable dirname: /Users/gregory/Projects/whereami/bin/mac-x86_64 basename: executable module path: /Users/gregory/Projects/whereami/bin/mac-x86_64/executable dirname: /Users/gregory/Projects/whereami/bin/mac-x86_64 basename: executable library loaded executable path: /Users/gregory/Projects/whereami/bin/mac-x86_64/executable dirname: /Users/gregory/Projects/whereami/bin/mac-x86_64 basename: executable module path: /private/tmp/library.dylib dirname: /private/tmp basename: library.dylib library unloaded
次のマクロを定義することで、ライブラリの動作をカスタマイズできます。
WAI_FUNCSPEC
WAI_PREFIX
WAI_MALLOC
WAI_REALLOC
WAI_FREE
_win-vs14/
フォルダーに Visual Studio 2015 ソリューションがあります。
_gnu-make/
フォルダーには GNU Make 3.81 MakeFile
があります。
$ make -j -C _gnu-make/
コマンドラインからコンパイルする場合は、上記を参照してください。それ以外の場合は、Xcode プロジェクトが_mac-xcode/
フォルダーにあります。
Xcode プロジェクトは_ios-xcode/
フォルダーにあります。
コマンドラインからコンパイルし、SSH 経由でジェイルブレイクされたデバイスにデプロイする場合は、次を使用します。
$ make -j -C _gnu-make/ binsubdir=ios CC="$(xcrun --sdk iphoneos --find clang) -isysroot $(xcrun --sdk iphoneos --show-sdk-path) -arch armv7 -arch armv7s -arch arm64" postbuild="codesign -s 'iPhone Developer'"
Android NDK をインストールし、 $NDK_ROOT
環境変数を NDK パスに指定する必要があります。たとえば、 export NDK_ROOT=/opt/android-ndk
(末尾の/
文字なし)。
次に、簡単な方法は、次のコマンドを使用してスタンドアロン Android ツールチェーンを作成することです。
$ $NDK_ROOT/build/tools/make_standalone_toolchain.py --arch=arm64 --api 21 --install-dir=/tmp/android-toolchain
これで、次を実行して例をコンパイルできます。
$ make -j -C _gnu-make/ platform=android architecture=arm64 CC=/tmp/android-toolchain/bin/aarch64-linux-android-gcc CXX=/tmp/android-toolchain/bin/aarch64-linux-android-g++
ページ配置ライブラリを APK から直接ロードすることがサポートされています。テストするには、次を使用します。
$ zip -Z store app bin/android/library.so $ zipalign -v -f -p 4 ./app.zip ./app.apk
次に、 bin/android/executable
とapp.apk
Android デバイスにコピーし、そこで起動します。
$ ./executable --load-library=$PWD/app.apk!/bin/android/library.so