компиляция нелокальных файлов с использованием NDK, ошибка компоновщика

0

Многие связанные вопросы были заданы в отношении ошибок компоновщика 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.

как я могу связать эти файлы вместе? Я не мог думать о каком-либо способе его указания. Любая помощь приветствуется.

  • 0
    В каком файле вы определяете эту функцию x ?
  • 0
    Привет, Йоахим, я определил эту функцию в sgl_BandwidthBench.c и вызвал ее в gl_code.cpp
Показать ещё 1 комментарий
Теги:
android-ndk
linker-errors

1 ответ

0

Как вы, возможно, знаете, ссылки на ошибки в неопределенных ссылках связаны с тем, что одна или несколько методов не могут быть реализованы системой сборки внутри предоставленных вами библиотек 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
  • 0
    Спасибо. но я смог скомпилировать и запустить пример программы без добавления этих файлов 3 c (sgl *). Это было бы невозможно, если бы его libGLESv3.so не было. Правильно?? нет ли проблем с добавлением новых файлов? как я не делаю что-то?
  • 0
    Привет @saipallavi, проверьте обновление на ответ. Это может помочь вам.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню