Soru Android NDK: gcc'nin ek olarak nasıl ekleyeceğini dizinlere dahil etme


Basit bir soru (Ben cygwin ile android NDK r6 kullanıyorum, ama bu makefiles ve gcc ile ilgili bir sorudur). Benim liblib_v_1 / altında bir kütüphane jni / dizin altına koyduğumu varsayalım. Mylib şu şekilde yapılandırılmıştır:

mylib_v_1
   mylib
      include

Dahil dizin altında iki dosya vardır, myinc1.hpp ve myinc2.hpp. Myinc1.hpp'de şu şekilde bir satır var:

#include <mylib/myinc2.hpp>

.cpp dosyasında, jni / dizininin altında şu satır var:

#include <mylib/myinc1.hpp>

#İnclude köşeli parantezler kullanmak için ek olarak, gcc'nin kullanmayı bilmesi için gcc'nin kullanımını bilmesi için Android.mk'yi (veya başka dosyaların ayarlanması gerekir) ayarlamak istiyorum (iki yerine) dosyalarım, gerçek durumumda, köşeli notalar ile başka bir çok .hpp içeren bir çok .hpp var.

Bunu nasıl yapabilirim?

Teşekkürler.

Ps. .Cpp dosyasında, bu şekilde ekleme değiştirirseniz:

#include "mylib/myinc1.hpp"

gcc, myinc1.hpp dosyasını buluyor, ancak işlerken, ikinci bölümü buluyor:

#include  <mylib/myinc2.hpp>

ve myinc2.hpp dosyasını bulamadığını söyleyerek orada durun.


21
2017-09-08 13:41


Menşei




Cevaplar:


Seçenek 1:

Android.mk'inize aşağıdaki satırlardan birini seçtiğiniz bir modülün içine ekleyin:

   LOCAL_C_INCLUDES := /path/to/your/includes # ignore previous includes
                                              # OR
   LOCAL_C_INCLUDES += /path/to/your/includes # preserve previous includes

Gerekirse, '/ path / to / your / includes' i işaret eden bir ortam değişkeni oluşturabilir ve bunu şöyle ekleyebilirsiniz:

   LOCAL_C_INCLUDES := $(MYLIB_INCLUDES_PATH) # ignore previous includes
                                              # OR
   LOCAL_C_INCLUDES += $(MYLIB_INCLUDES_PATH) # preserve previous includes

Seçenek 2:

  1. Tüm klasörü, içindeki tüm üstbilgilerle (mylib) projenizin 'jni' klasörüne kopyalayın.

  2. Android.mk'inize aşağıdaki satırı seçtiğiniz bir modülün içine ekleyin:

    LOCAL_C_INCLUDES := $(LOCAL_PATH)/mylib
    

    veya

    LOCAL_C_INCLUDES += $(LOCAL_PATH)/mylib
    

Önceden var olup olmadığına bağlı olarak.

Seçenek 3:

Eclipse için CDT eklentisini yükleyin ve 'mylib' dizininin mutlak yolunu projenizin dahil etme yollarına ekleyin. İşte tüm gerekli adımları gösteren harika bir öğretici.

http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-development/


26
2017-08-12 15:43



Seçenek 1 ve 2 benim için çalışmaz, yoksa ben her c'nin başında -I / yol / senin / includes / için veya -I "/ path / to / senin / içeren". - leetNightshade
Sadece kullan kesin "LOCAL_C_INCLUDES + =" içindeki yol, CDT durumu için benim için çalışır, ancak ndk-build için böyle bir sınır yoktur. - Yingpei Zeng


Kullanarak Android.mk içindeki C include yollarını ekleyebilirsiniz:

common_CFLAGS := -Ijni/mylib/include

Ek yollar, başka bir I seçeneği gerektirir.


3
2017-09-08 14:50



Çalışmanın yolu yok. Hala mylib / myinc1.hpp bulamıyor diyor. LOCAL_PATH jni dizini olması gerektiğinden, common_CFLAGS + = $ (LOCAL_PATH) / mylib ekledim. - Luke
Yorumunuzdan, yoldan önce -I unuttun gibi görünüyor. - Burton Samograd
Tüm olası kombinasyonları denedim. Yapacak bir şey yok. Gerçekten kucaklayan ... Ancak, proje d: / android / workspace / helloworld altındadır. Helloworld altında jni dizini ve içinde .cpp ve .mk dosyaları var. Cygwin ile tam olarak helloworld / jni dizinine gitmeliyim ve şu şekilde yazmalıyım: / cygdrive / d / android / android-ndk-r6 / ndk-build NDK_LOG = 1. Umarım bu yardımcı olur bana yardım edin! - Luke
Tamam, burada bir şeyler öğreniyorum. Birincisi, NDK_BUILD V = 1'e ulaştım. Bu, gcc'nin nasıl çalıştırıldığını göstermek için zorlama sürecini zorlayacaktır. Ben herhangi bir başarı olmadan common_FLAGS ve LOCAL_C_INCLUDES kullanmayı denedim (aslında, -I cmd satır seçeneği / mylib => bu gerçek problem oldu). Dokümanlardan, bir şeyler eklemek için başka bir yol öğrendim: şimdi LOCAL_C_INCLUDES: = $ (NDK_APP_PROJECT_PATH) / jni / mylib kullanıyorum. Hemen çalıştı. Ancak LOCAL_C_INCLUDES yerine kullanılması önerilir. Lanet olsun... - Luke
teşekkürler Luke, kodunuz işe yaradı ... aynı problemi yaşadı ... bu şeyi anlamaya bir saat oturdu ... - Houston