6

Android Studio, başlık dosyamı modülümün ana kaynak klasöründen farklı bir konumda bulunduğunda bulamıyor. Bu kırmızıyla vurgulanan "SDL_config.h" ifadeleri #include tarafından fark edilir (diğer #include ifadeleri iyidir).Bir C/C++ ayarı, Gradle Experimental Plugin ile nasıl bir yol oluşturur?

aşağıda CPPFLAGS değerlerini değiştirerek denedim ama bu CPPFLAGS hatta hiç derleyiciye geçirilen olduğunu şüphe etmeye başlıyorum.

kimse bu şekilde onların ana kaynak klasörü dışında klasörlerden dosyaları dahil başardı mı? Ben CPPFLAGS, ya da belki modulename hatta kaynakları belirttiğiniz şekilde bir sorun

var mı?

Ben SDL2 kaynağı geçmesi ve bağıl #include yollara #include tabloların tamamını değiştirmek ama gerçekten SDL2 kaynağını değiştirmek istemiyoruz başladı. Bir şekilde dahil edilen yolların bir listesini belirtmeliyim.

apply plugin: 'com.android.model.application' 

model { 
... 
    android.ndk { 
     moduleName = 'main' 

     //W:\hello-sdl-android\android-project\app\src\main\jni\SDL2\include 
     cppFlags += "-I${file("src/main/jni/SDL2/include")}".toString() 
     cppFlags += "-I${file("src/main/jni/SDL2/src")}".toString() 
    } 

    android.sources { 
     main.jni { 
      source { 
       srcDirs += ['src/main/jni/src'] 
       srcDirs += ['src/main/jni/SDL2/src'] 
      } 
     } 
    } 
... 
} 

GÜNCELLEME: İşte benim mevcut proje düzenine daha fazla bilgi verilmiştir:

app/src/main/jni app/src/main/jni/src/main.cpp < - Bu derleme uygulaması/src/main/jni/SDL2 < - Bütün SDL2 kaynağı burada app altında/src/main/jni/GLM < - Bu düzen örnek projesini kullanarak doğrudan bir sonucudur

burada altındaki tüm GLM kaynağı olan Burada sağlandı: https://gitlab.com/scannerdarkly/hello-sdl-android

Bu proje, komut satırından ndk-build kullanılarak oluşturulacak - Android Studio'da geliştirerek bir adım daha ileriye taşımak istedim. Projem, bir GLES2 cihazında bir üçgen çizmeye çalışacak. ..

cFlags += "-I" + file("src/main/jni/SDL2/include").absolutePath 

ve bu işler:

http://www.mediafire.com/download/92577p7vf123l72/hello-sdl-android.zip

cevap

2

Evet! Ben bunu anladım - SDL2 kaynak dosyaları .C dosyaları, bu yüzden yolları cppFlags değil, CFlags kullanarak bildirilmesi gerekir. Birçok başlık yolları için

9

ben biraz farklı bir yaklaşım kullanın: Burada

bugüne kadar benim şimdiki proje için bir bağlantıdır. nedeni derleyici farklı bir çalışma dizininin ile başlatılan ve absolutePath burada herhangi bir belirsizliği ortadan kaldırmaktadır olduğunu muhtemelen olmasıdır.

+0

Teşekkür - I will Bunu birkaç saat içinde deneyin ve yardımcı olup olmadığını size bildirin. Cevabın diğer cevabı ise sileceğim. – SparkyNZ

+0

Bu hala benim için çalışmıyor. Aslına bakarsanız, #include "SDL_config.h" dosyasını main.cpp dosyasına yerleştirmeyi denedim ve iyi görünüyor. Benim bir problemim olduğu SDL2 kaynağını derlerken.Yani ek bir "moduleName" veya bir "sub" modül adı belki de ihtiyacım var? "ModuleName" in aslında ne ifade ettiği konusunda kafam karıştı - kesinlikle bir yürütülebilir dosya veya kütüphane anlamına gelir - bireysel bir .cpp dosyası değil. Kısa bir süre içinde indirme linki vereceğim. Bunu işe almak başkalarına fayda sağlayacaktır. – SparkyNZ

+0

Bir şey daha - SDL kaynak dosyaları C dosyalarıdır .. Main.cpp bir C++ dosyasıdır. Belki benim sorunum "cppFlags" ek olarak "cFlags" ilan etmek kadar basit? – SparkyNZ

0

: Burada

cFlags = "-I" + file("src/main/jni/path1").absolutePath + 
    " -I" + file("src/main/jni/path2").absolutePath + 
    " -I" + file("src/main/jni/path3").absolutePath 
1

gradle deneysel eklenti, örnek openssl ile ve bazı "abc" kitaplığı kullanarak daha fazla başlık yolları için başka tarzıdır:

// compile parameters 

// include openssl headers C (if you have C files) 
CFlags.add("-isystem${project.rootDir}/external-libraries/openssl/openssl-1.0.2g/include".toString()) 

// include openssl headers C++ (if you have cpp files) 
cppFlags.add("-isystem${project.rootDir}/external-libraries/openssl/openssl-1.0.2g/include".toString()) 

// include abc headers C (if you have C files) 
CFlags.add("-I${project.rootDir}/external-libraries/abc/abc-5.5/include".toString()) 

// include abc headers C++ (if you have cpp files) 
cppFlags.add("-I${project.rootDir}/external-libraries/abc/abc-5.5/include".toString()) 

// linking parameters 

// link libcrypto.so 
ldFlags.add("-L${project.rootDir}/external-libraries/openssl/openssl-1.0.2g/lib/armeabi-v7a".toString()) 
ldLibs.add('crypto') 

// link libabc.so 
ldFlags.add("-L${project.rootDir}/external-libraries/abc/abc-5.5/lib".toString()) 
ldLibs.add('abc')