Una biblioteca de dos archivos desplegable para ubicar el ejecutable actual y el módulo actual en el sistema de archivos.
Plataformas compatibles:
ventanas
linux
Impermeable
iOS
Androide
Neutrino QNX
FreeBSD
NetBSD
Libélula BSD
SunOS
OpenBSD
Simplemente coloca whereami.h
y whereami.c
en tu compilación y comienza. (ver también personalizar la compilación)
wai_getExecutablePath()
devuelve la ruta del ejecutable adjunto
wai_getModulePath()
devuelve la ruta del módulo adjunto
Uso de ejemplo:
primera llamada int length = wai_getExecutablePath(NULL, 0, NULL);
para recuperar la longitud del camino
asigne el búfer de destino con path = (char*)malloc(length + 1);
llame wai_getExecutablePath(path, length, &dirname_length)
nuevamente para recuperar la ruta
agregue un carácter NUL
terminal con path[length] = '�';
Aquí está el resultado del ejemplo:
$ 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
Puede personalizar el comportamiento de la biblioteca definiendo las siguientes macros:
WAI_FUNCSPEC
WAI_PREFIX
WAI_MALLOC
WAI_REALLOC
WAI_FREE
Hay una solución de Visual Studio 2015 en la carpeta _win-vs14/
.
Hay un MakeFile
GNU Make 3.81 en la carpeta _gnu-make/
:
$ make -j -C _gnu-make/
Consulte arriba si desea compilar desde la línea de comando. De lo contrario, hay un proyecto Xcode ubicado en la carpeta _mac-xcode/
.
Hay un proyecto Xcode ubicado en la carpeta _ios-xcode/
.
Si prefiere compilar desde la línea de comandos e implementar en un dispositivo con jailbreak a través de SSH, use:
$ 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'"
Tendrá que instalar el NDK de Android y apuntar la variable de entorno $NDK_ROOT
a la ruta del NDK: por ejemplo, export NDK_ROOT=/opt/android-ndk
(sin un carácter /
final).
A continuación, la forma más sencilla es crear una cadena de herramientas de Android independiente con el siguiente comando:
$ $NDK_ROOT/build/tools/make_standalone_toolchain.py --arch=arm64 --api 21 --install-dir=/tmp/android-toolchain
Ahora puedes compilar el ejemplo ejecutando:
$ 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++
Se admite la carga de una biblioteca alineada con páginas directamente desde APK. Para probar, use lo siguiente:
$ zip -Z store app bin/android/library.so $ zipalign -v -f -p 4 ./app.zip ./app.apk
Luego copie bin/android/executable
y app.apk
a su dispositivo Android y ejecute allí:
$ ./executable --load-library=$PWD/app.apk!/bin/android/library.so