2016-03-11 6 views
7

Sto cercando di costruire una biblioteca con Android NDK-11 e sto ottenendo un errore di linker:NDK 11 linker è trattare gli avvisi come errori

arm-linux-androideabi/bin/ld: error: treating warnings as errors

non ottengo questo errore se io usa ndk-r10e.

Esecuzione di ndk-build con V = 1, vedo che -Wl,--fatal-warnings viene passato al linker. Ho provato ad aggiungere LOCAL_LDFLAGS:=-Wl,--no-fatal-warnings al mio file Android.mk, e posso vedere nell'output del linker che è effettivamente passato al linker, ma è passato prima dello-Wl,--fatal-warnings, quindi viene ignorato.

Gli avvisi provengono da una libreria di terze parti, quindi non posso semplicemente ricompilarlo per correggere gli avvertimenti (sono tutti avvertimenti di 'rilocazione si riferisce alle sezioni scartate'). Ho sempre visto questi avvertimenti e non ho mai avuto problemi.

Qualcuno sa come dire al ndk-11 linker non per trattare gli avvisi come errori?

risposta

12

L'ho capito mentre stavo scrivendo, quindi ho pensato di condividere la soluzione.

<NDK_ROOT>/build/core ha un sacco di file .mk che vengono utilizzati durante l'esecuzione di ndk-build. All'interno di build-binary.mk, ci sono alcuni nuovi controlli (non documentati) per le variabili che è possibile definire. Per questo particolare, v'è il seguente blocco:

# We enable fatal linker warnings by default. 
# If LOCAL_DISABLE_FATAL_LINKER_WARNINGS is true, we don't enable this check. 
ifneq ($(LOCAL_DISABLE_FATAL_LINKER_WARNINGS),true) 
    LOCAL_LDFLAGS += -Wl,--fatal-warnings 
endif 

Aggiunta LOCAL_DISABLE_FATAL_LINKER_WARNINGS=true al mio file .mk fatto l'errore di andare via.

Ci sono lotti di altre cose definite in questi file, quindi se si verificano strani errori di compilazione all'improvviso, dare un'occhiata in là per vedere se qualcosa di nuovo è stato abilitato.