Я работаю с Android NDK r6b под Cygwin (система обновляется правильно). Я изменяю пример hello-jni, чтобы научиться работать с NDK. Поскольку у меня есть библиотека, написанная на C ++, которую я хочу использовать в hello-jni (на самом деле, я создал prj с именем helloworld с единственным файлом .cpp с именем ndkfoo.cpp), я создал новый проект Android в Eclipse ( обновлен для Android), добавлен каталог jni, добавлены файлы Android.mk и Application.mk, отредактированы их для компиляции .cpp. В конце компиляции я получаю файл .so .
Теперь в helloworld Android.mk мне нужно внести некоторые изменения, чтобы указать компоновщику включить эту библиотеку. Предположим, что файл библиотеки libmylib.so , у меня есть следующий скрипт android.mk:
LOCAL_PATH: = $ (позвоните в мою директорию)
включает $ (CLEAR_VARS)
LOCAL_MODULE: = ndkfoo
LOCAL_SRC_FILES: = ndkfoo.cpp
LOCAL_C_INCLUDES + = $ (LOCAL_PATH) / mylib
LOCAL_LDLIBS + = -L $ (LOCAL_PATH) /../../ mylib / libs / armeabi / -lmylib
включает $ (BUILD_SHARED_LIBRARY)
Мои каталоги организованы следующим образом:
d:/android/android-ndk-r6b => android ndk root
d:/android/workspace/helloworld => helloworld project
d:/android/workspace/mylib => mylib project library
(следовательно, путь к libmylib.so: d: / android / workspace / mylib / libs / armeabi).
К сожалению, это не похоже на работу. Если я удаляю все ссылки на mylib из ndkfoo.cpp, он компилируется и запускается даже на моем телефоне. Если я не удаляю ссылки на mylib , он компилируется, но не связывается: я получаю следующий результат:
D: /android/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windo
WS / бен /../ Библиотека / GCC / арм-линукс-androideabi / 4.4.3 /../../../../ рычажного линукс-androideabi /
bin / ld.exe: не удается найти -lmylib
Ps.
Я забыл упомянуть, что я запускаю ndk-buld в каталоге jni проекта helloworld.
ПСС.
Я нашел много подобных вопросов в Интернете. Я всегда работал с Visual C / C ++ IDE, поэтому я действительно новичок в GCC, make-файлах и так далее ...