2014-09-24 21 views
5

Obecnie utknąłem na problemie z kompilacją na Androida dla mojej aplikacji.Plik nagłówka nie został znaleziony tylko w określonej jednostce tłumaczeniowej

otrzymuję następujący błąd podczas kompilacji mojego natywną biblioteką z ndk-build:

BackgroundDisplayConfiguration.h:12:23: fatal error: glm/glm.hpp: 
No such file or directory 
#include <glm/glm.hpp> 
         ^

Co mnie zastanawia to to, że nie podano ścieżkę dla tego nagłówka biblioteki tylko w moim Android.mk następujący sposób:

LOCAL_CPPFLAGS += -I../../glm/include 

Ta ścieżka istnieje i jest poprawna, ale ponadto jeśli zepsuję tę ścieżkę, otrzymam ten sam błąd w innych plikach, które zawierają glm.hpp. Gdy ścieżka jest prawidłowa, tylko ten plik powoduje błąd i nie rozumiem, dlaczego. Jakieś wskazówki?

EDIT: Okay, to jeszcze bardziej zagadkowe. Opcja include pojawia się w każdym poleceniu kompilatora dla każdego pliku, ale nie w poleceniu kompilatora dla dużego wrappera generowanego przez swig (który wyprowadza mój library_native_wrap.o), i to tam generuje błąd ... Cóż, to przynajmniej wyjaśnia zaobserwowane zachowanie.

+0

nie wiem o Android NDK, ale może to tylko używa 'LOCAL_CPPFLAGS' dla tylko przerób, a nie dodać flagi do flag kompilatora? Czy próbowałeś ustawić np. "LOCAL_CXXFLAGS"? –

+1

@JoachimPileborg Cóż, [dokumentacja dla pliku makefile dla Androida] (http://www.kandroid.org/ndk/docs/ANDROID-MK.html) stwierdza, że ​​'LOCAL_CXXFLAGS' jest aliasem dla' LOCAL_CPPFLAGS' tak czy inaczej, a nawet więcej, że będzie to przestarzałe. Naprawdę zastanawia mnie fakt, że dzieje się to tylko na konkretnym pliku i wydaje się działać dla innych ... – JBL

+0

Tylko ze względu na próbę, dodałem opcję include zarówno do "LOCAL_CXXFLAGS', jak i do' LOCAL_CFLAGS' i nie naprawiam problem. – JBL

Odpowiedz

3

Tak więc znalazłem obejście tego problemu, nawet jeśli nie jest to właściwe.

W istocie dowiedziałem się, że podczas kompilowania każdego źródła mojej biblioteki, komenda kompilatora rzeczywiście zawierała opcję włączania, ale wtedy, podczas kompilowania wyjścia swig (tego dużego unikalnego pliku C++), opcja nie była już tam.

Znalazłem sposób, aby to poprawić, dodając moją ścieżkę dołączania do LOCAL_EXPORT_C_INCLUDES.

Z jakiegoś powodu, LOCAL_CPPFLAGS nie są wykorzystywane przy kompilacji otoki ...

+0

@jww Haha, zamierzałem powiedzieć "W innym powiązanym wątku, ktoś faktycznie zakwalifikował cały system jako _broken_". Wtedy zdałem sobie sprawę [** to był ty **] (http://stackoverflow.com/questions/25663989/warning-android-mk-non-system-libraries-in-linker-flags/25665219#comment40107927_25665219) w rzeczywistości .. . :) – JBL

Powiązane problemy