Я портирую команду 'iw' на Android. Это связано с беспроводной связью. Похоже, что инструмент iw имеет набор команд, которые можно использовать, однако с сайта другого пользователя:
Взгляд на источник iw показал, что iw вставляет все эти вещи в
раздел ELF, который в основном исчезает, когда вы связываетесь с
-gc сечения.
Этот человек тоже портировал iw на Android, но решил сделать кросс-компиляцию через make вместо сборки Android.mk и сборки через android-ndk. Он упоминает, что всякий раз, когда удаляется --gc-section:
Итак, изгнав из командной строки моего компоновщика, я наконец
есть работающий Android iw
Я считаю, что это правда. Всякий раз, когда я собираю «iw» путем создания Android.mk, а затем запускаю «iw» на моем устройстве Android, все эти команды исчезают.
Вот мой Android.mk:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
iw.c \
genl.c \
event.c \
info.c \
phy.c \
interface.c \
ibss.c \
station.c \
survey.c \
util.c \
mesh.c \
mpath.c \
scan.c \
reg.c \
version.c \
reason.c \
status.c \
connect.c \
link.c \
offch.c \
ps.c \
cqm.c \
bitrate.c \
wowlan.c \
roc.c \
sections.c
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../lowpan/include \
$(LOCAL_PATH)/../libnl/include
LOCAL_CFLAGS += -g
LOCAL_CFLAGS += -fPIC -DPIC
LOCAL_STATIC_LIBRARIES := libnls libnl
ifeq ($(TARGET_BUILD_TYPE),release)
LOCAL_CFLAGS += -g
endif
LOCAL_MODULE:= iw
include $(BUILD_EXECUTABLE)
Если это правда, что android-ndk каким-то образом использует --gc-секции и удаляет эти команды из секции ELF, я не могу понять, как помешать ему это сделать. У кого-нибудь есть предложения?
Редактировать: похоже, NDK использует это:
build/core/default-build-commands.mk: -Wl,--gc-sections \
build/tools/toolchain-patches/build/0001-Options-brought-in-from-core-combo-for-IA.patch:+ -fexceptions -ffunction-sections -finline-functions \
build/tools/toolchain-patches/build/0001-Options-brought-in-from-core-combo-for-IA.patch:+ -Wl,-z,noexecstack -Wl,--gc-sections -nostdlib \
build/tools/toolchain-patches/build/0001-Options-brought-in-from-core-combo-for-IA.patch:+ -fexceptions -frtti -fstrict-aliasing -ffunction-sections -finline-functions \
build/tools/toolchain-patches/build/0001-Options-brought-in-from-core-combo-for-IA.patch:+ -ffunction-sections -funwind-tables -fmessage-length=0 \
toolchains/arm-linux-androideabi-4.4.3/setup.mk: -ffunction-sections \
toolchains/arm-linux-androideabi-4.4.3/setup.mk: -Wl,--gc-sections \
toolchains/x86-4.4.3/setup.mk: -ffunction-sections \
toolchains/x86-4.4.3/setup.mk: -Wl,--gc-sections \
РЕДАКТИРОВАТЬ: я удалил все экземпляры --gc-section и --function-section из android-ndk, и после перестройки это работает! Однако я бы предпочел не изменять android-ndk, поэтому в моем локальном Android.mk должна быть модификация для удаления этих двух флагов.
РЕДАКТИРОВАТЬ: я удалил только --gc-секции из вышеупомянутых файлов android-ndk по умолчанию, и это решило проблему. Итак, --function-section не связан. Мне просто нужно выяснить, как отключить --gc-секции в локальном Android.mk