Uma biblioteca suspensa de dois arquivos para localizar o executável atual e o módulo atual no sistema de arquivos.
Plataformas suportadas:
Windows
Linux
Mac
iOS
Android
Neutrino QNX
FreeBSD
NetBSD
Libélula BSD
SunOS
OpenBSD
Basta inserir whereami.h
e whereami.c
em sua compilação e começar. (veja também personalizando a compilação)
wai_getExecutablePath()
retorna o caminho do executável anexo
wai_getModulePath()
retorna o caminho do módulo envolvente
Exemplo de uso:
primeira chamada int length = wai_getExecutablePath(NULL, 0, NULL);
para recuperar o comprimento do caminho
aloque o buffer de destino com path = (char*)malloc(length + 1);
chame wai_getExecutablePath(path, length, &dirname_length)
novamente para recuperar o caminho
adicione um caractere terminal NUL
com path[length] = '�';
Aqui está a saída do exemplo:
$ 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
Você pode personalizar o comportamento da biblioteca definindo as seguintes macros:
WAI_FUNCSPEC
WAI_PREFIX
WAI_MALLOC
WAI_REALLOC
WAI_FREE
Há uma solução do Visual Studio 2015 na pasta _win-vs14/
.
Há um MakeFile
GNU Make 3.81 na pasta _gnu-make/
:
$ make -j -C _gnu-make/
Veja acima se você deseja compilar a partir da linha de comando. Caso contrário, há um projeto Xcode localizado na pasta _mac-xcode/
.
Existe um projeto Xcode localizado na pasta _ios-xcode/
.
Se você preferir compilar a partir da linha de comando e implantar em um dispositivo desbloqueado por meio 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'"
Você terá que instalar o Android NDK e apontar a variável de ambiente $NDK_ROOT
para o caminho do NDK: por exemplo, export NDK_ROOT=/opt/android-ndk
(sem o caractere /
final).
A seguir, a maneira mais fácil é criar um conjunto de ferramentas Android independente com o seguinte comando:
$ $NDK_ROOT/build/tools/make_standalone_toolchain.py --arch=arm64 --api 21 --install-dir=/tmp/android-toolchain
Agora você pode compilar o exemplo executando:
$ 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++
O carregamento da biblioteca alinhada à página diretamente dos APKs é suportado. Para testar, use o seguinte:
$ zip -Z store app bin/android/library.so $ zipalign -v -f -p 4 ./app.zip ./app.apk
Em seguida, copie bin/android/executable
e app.apk
para o seu dispositivo Android e inicie:
$ ./executable --load-library=$PWD/app.apk!/bin/android/library.so