Многие связанные вопросы были заданы в отношении ошибок компоновщика NDK, но я не мог четко найти решение моей ситуации. Я пытаюсь расширить образец NDK applicaiton, добавив еще 4 локальных файла. Я включаю их в файл Android.mk и включая файлы.h соответственно. Вот мой Android.mk файл.
include $(BUILD_SHARED_LIBRARY)
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libgl2jni
LOCAL_CFLAGS := -Werror
LOCAL_SRC_FILES := gl_code.cpp \
sglBandwidthBench.c \
sglBandwidth.c \
common.c \
timer.c
LOCAL_LDLIBS := -llog -lGLESv3 -lEGL
include $(BUILD_SHARED_LIBRARY)
и включение файлов.h было правильным. но компиляция дает мне неопределенную ссылку на функцию x. Я добавил файлы sglBandwidthBench.c sglBandwidth.c common.c timer.c, ни одна из них не содержит основную функцию, а единственная ссылка - через реферирование одной из этих функций в gl_code.cpp.
как я могу связать эти файлы вместе? Я не мог думать о каком-либо способе его указания. Любая помощь приветствуется.
Как вы, возможно, знаете, ссылки на ошибки в неопределенных ссылках связаны с тем, что одна или несколько методов не могут быть реализованы системой сборки внутри предоставленных вами библиотек prebuit. Итак, в нижней строке, вы, вероятно, не хватает общей библиотеки, которая содержит реализацию для функции x
.
Мой совет будет состоять в том, чтобы проверить, действительно ли у вас libGLESv3.so
в любом из ваших <ndk>\platforms\<android-api-level>\arch-arm\usr\lib
. Кроме того, проверьте <ndk>\docs\STABLE-APIS.html
чтобы увидеть, указаны ли все библиотеки, которые вы используете. Если одного из них нет, вам нужно либо обновить версию NDK, либо вручную добавить недостающую библиотеку в исходный код (для этого прочитайте раздел PREBUILT_SHARED_LIBRARY из <ndk>\docs\ANDROID-MK.html
).
Надеюсь, что это поможет!
EDIT: Привет Сай, из того, что я только что узнал из ваших комментариев, вы пытаетесь вызвать метод, реализованный в .c
файле изнутри .cpp
. Поэтому вам необходимо приложить содержимое вашего gl_code.cpp следующим фрагментом кода:
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
x
?