LOCAL_LDLIBS не работает, но LOCAL_LDFLAGS работает. Зачем?

Я пытался включить liblog в свое приложение, чтобы использовать печать журнала Android.

Я пытался включить это с LOCAL_LDLIBS

LOCAL_LDLIBS := -llog

Это не работает. Я получаю ошибку ниже:

error: undefined reference to '__android_log_print'

Я вижу несколько приложений, использующих LOCAL_LDFLAGS вместо. Я пытался, и это сработало. Почему это? Также LOCAL_SHARED_LIBRARIES работает так же.

1 ответ

У меня нет определенного ответа, но я недавно боролся с той же проблемой, и это мои выводы. Надеюсь, кто-нибудь проверит.

LOCAL_LDLIBS и LOCAL_SHARED_LIBRARIES используются для связывания библиотек. Однако LOCAL_SHARED_LIBRARIES ищет промежуточные объекты и, если не найден, библиотека перестраивается.

LOCAL_LDLIBS ожидает найти окончательную библиотеку.

Они оба работают под SDK и NDK.

Я столкнулся с проблемой неработоспособности LOCAL_LDLIBS при создании платформы Android или, если быть более точным, одного из ее компонентов, камеры. Причина, по которой LOCAL_LDLIBS не работает, заключается в том, что он вообще не отображается в команде ссылки.

Т.е. при сборке внутри папки компонентов (в моем случае cameraHAL) mm showcommands (сначала выполните. Build/envsetup.sh в основной папке), команда link не имеет указаний на что-либо, указанное для LOCAL_LDLIBS.

Это почему?

Я считаю, что логика заключается в том, что при создании андроида у вас должны быть все источники, поэтому использование LOCAL_SHARED_LIBRARIES - правильный путь.

LOCAL_LDFLAGS против LOCAL_LDLIBS. LOCAL_LDFLAGS используется для передачи любых флагов, а не только библиотек для связи, поэтому он появляется в команде link.

LOCAL_LDLIBS предназначен только для связывания библиотек и только для использования под NDK/SDK.

Другие вопросы по тегам