Jak zabráním, aby určité funkce od získání zbaven?

hlasů
5

Mám statickou knihovnu, která obsahuje některé JNICALL funkce, to znamená, že se očekává, že bude volat z JVM a nejsou nikdy odkazuje na sdílené knihovny, která spojuje statickou knihovnu.

Nicméně se zdá, že funkce stripping je deratizační funkci JNICALL (to není vidět na rameni-EABI-objdump -t). Dělám kolem ní přidáním fiktivní funkci s nesplnitelné podmínky, která volá funkci JNICALL, ale to je špinavá. Vím, že existuje možnost spojení, aby se zabránilo některé moduly od získání jejich nepoužívané údaje odstraněny, ale co je to? A jak mám zadat tuto možnost v souboru .mk? Neviděl jsem nic ARM EABI-LD ihned zřejmý.

Mimochodem, funkce stírání neodstraňuje se JNICALL funkce ve sdílené samotné knihovny, ale odstraní ty z statické knihovny, že sdílený knihovna je spojující. Jaký je důvod, že?

Položena 29/08/2010 v 04:05
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
5

Ve skutečnosti to vypadá jako tým NDK začal podporovat, že (nebo zastaven?), A tam jsou stopy z toho v sestavení systému, ale některé životně důležité části chybí. Dobrou zprávou je, že ji lze snadno implementovat.

Jděte do „build“ adresáře instalace NDK a vyhledat všechny výskyty LOCAL_STATIC_LIBRARIES. Zkopírovat a vložit všechny z nich a přidat verzi, která verze, která dělá totéž s LOCAL_STATIC_WHOLE_LIBRARIES.

Abychom byli přesní: Ve výstavbě / jádro / build-binary.mk, budete potřebovat:

LOCAL_STATIC_LIBRARIES := $(call strip-lib-prefix,$(LOCAL_STATIC_LIBRARIES))
LOCAL_STATIC_WHOLE_LIBRARIES := $(call strip-lib-prefix,$(LOCAL_STATIC_WHOLE_LIBRARIES))

[...]

static_libraries := $(call map,static-library-path,$(LOCAL_STATIC_LIBRARIES))
static_whole_libraries := $(call map,static-library-path,$(LOCAL_STATIC_WHOLE_LIBRARIES))

[...]

$(call module-add-static-depends,$(LOCAL_MODULE),$(LOCAL_STATIC_LIBRARIES))
$(call module-add-static-depends,$(LOCAL_MODULE),$(LOCAL_STATIC_WHOLE_LIBRARIES))

[...]

$(LOCAL_BUILT_MODULE): $(static_libraries) $(static_whole_libraries) $(shared_libraries)

[...]

$(LOCAL_BUILT_MODULE): PRIVATE_STATIC_LIBRARIES := $(static_libraries)
$(LOCAL_BUILT_MODULE): PRIVATE_WHOLE_STATIC_LIBRARIES := $(static_whole_libraries)

Všimněte si rozdíl mezi STATIC_WHOLE a WHOLE_STATIC - to je to, jak je to v NDK, vybral jsem si to tak zůstalo i když je to v rozporu.

Nyní, konečně, v sestavení / toolchains / arm-EABI-4.4.0 / setup.mk: Je tu již jsou PRIVATE_WHOLE_STATIC_LIBRARIES blokovat sdílených knihoven. Můžete si vybrat, aby dodat, že spustitelné soubory stejně, i když to s největší pravděpodobností není nutné.

Odpovězeno 05/09/2010 v 18:37
zdroj uživatelem

hlasů
1

Viz druhou otázku .

Odpovězeno 31/08/2010 v 18:16
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more