Une bibliothèque de deux fichiers pour localiser l'exécutable actuel et le module actuel sur le système de fichiers.
Plateformes prises en charge :
Fenêtres
Linux
Mac
IOS
Androïde
Neutrino QNX
GratuitBSD
NetBSD
Libellule BSD
SunOS
OpenBSD
Déposez simplement whereami.h
et whereami.c
dans votre build et commencez. (voir aussi personnalisation de la compilation)
wai_getExecutablePath()
renvoie le chemin de l'exécutable englobant
wai_getModulePath()
renvoie le chemin du module englobant
Exemple d'utilisation :
premier appel int length = wai_getExecutablePath(NULL, 0, NULL);
pour récupérer la longueur du chemin
allouez le tampon de destination avec path = (char*)malloc(length + 1);
appelez à nouveau wai_getExecutablePath(path, length, &dirname_length)
pour récupérer le chemin
ajoutez un caractère NUL
terminal avec path[length] = '�';
Voici le résultat de l'exemple :
$ 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
Vous pouvez personnaliser le comportement de la bibliothèque en définissant les macros suivantes :
WAI_FUNCSPEC
WAI_PREFIX
WAI_MALLOC
WAI_REALLOC
WAI_FREE
Il existe une solution Visual Studio 2015 dans le dossier _win-vs14/
.
Il y a un MakeFile
GNU Make 3.81 dans le dossier _gnu-make/
:
$ make -j -C _gnu-make/
Voir ci-dessus si vous souhaitez compiler à partir de la ligne de commande. Sinon, il existe un projet Xcode situé dans le dossier _mac-xcode/
.
Il existe un projet Xcode situé dans le dossier _ios-xcode/
.
Si vous préférez compiler à partir de la ligne de commande et déployer sur un appareil jailbreaké via SSH, utilisez :
$ 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'"
Vous devrez installer le NDK Android et pointer la variable d'environnement $NDK_ROOT
vers le chemin du NDK : par exemple, export NDK_ROOT=/opt/android-ndk
(sans caractère /
final).
Ensuite, le moyen le plus simple consiste à créer une chaîne d’outils Android autonome avec la commande suivante :
$ $NDK_ROOT/build/tools/make_standalone_toolchain.py --arch=arm64 --api 21 --install-dir=/tmp/android-toolchain
Vous pouvez maintenant compiler l'exemple en exécutant :
$ 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++
Le chargement d'une bibliothèque alignée sur les pages directement à partir des APK est pris en charge. Pour tester, utilisez ce qui suit :
$ zip -Z store app bin/android/library.so $ zipalign -v -f -p 4 ./app.zip ./app.apk
Copiez ensuite bin/android/executable
et app.apk
sur votre appareil Android et lancez-y :
$ ./executable --load-library=$PWD/app.apk!/bin/android/library.so