一个插入式两个文件库,用于在文件系统上查找当前可执行文件和当前模块。
支持的平台:
视窗
Linux
苹果
iOS系统
安卓
QNX中微子
自由BSD
网络BSD
蜻蜓BSD
太阳操作系统
开放BSD
只需将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)
来检索路径
添加一个终端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/
如果您想从命令行编译,请参阅上面的内容。否则, _mac-xcode/
文件夹中会有一个 Xcode 项目。
_ios-xcode/
文件夹中有一个 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