ไลบรารีไฟล์สองไฟล์แบบดรอปอินเพื่อค้นหาไฟล์ปฏิบัติการปัจจุบันและโมดูลปัจจุบันบนระบบไฟล์
แพลตฟอร์มที่รองรับ:
หน้าต่าง
ลินุกซ์
แม็ค
ไอโอเอส
หุ่นยนต์
คิวเอ็นเอ็กซ์ นิวตริโน
ฟรีBSD
เน็ตบีเอสดี
ดราก้อนฟลาย BSD
ซันโอเอส
OpenBSD
เพียงวาง whereami.h
และ whereami.c
ลงใน build ของคุณแล้วเริ่มต้นได้เลย (ดูการปรับแต่งการรวบรวมด้วย)
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
มีโซลูชัน Visual Studio 2015 ในโฟลเดอร์ _win-vs14/
มี GNU Make 3.81 MakeFile
ในโฟลเดอร์ _gnu-make/
:
$ 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
(โดยไม่มีส่วนท้าย /
อักขระ)
ถัดไป วิธีง่ายๆ คือการสร้าง toolchain 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