Statik lib bağımlılığı olan bir Android uygulamasını derlemek için gradlew
çalıştırıyorum. Her nasılsa, bsd_signal
için tanımlanmamış bir başvurum var. Android bağlayıcı: bsd_signal için tanımlanmamış başvuru
gradle.build
dosyasına daha inşa talimat koyarak lehine benim
Android.mk
dosya açılır yükümlü ettik ve bu nerede sorun ortaya çıkıyor.
Bana projemle bağlantı kurmam gereken bsd_signal
'u tanımlayan bir kütüphane olup olmadığını söyleyen var mı?
Derleyici çıkış
Starting process 'command '/home/myself/Android/Sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++''. Working directory: /home/myself/projects/DroidEar/app Command: /home/myself/Android/Sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++ @/home/myself/projects/DroidEar/app/build/tmp/linkNativeArmeabi-v7aDebugSharedLibrary/options.txt
Successfully started process 'command '/home/myself/Android/Sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++''
/android/ndk/platforms/android-9/arch-arm/usr/include/signal.h:113: error: undefined reference to 'bsd_signal'
/android/ndk/platforms/android-9/arch-arm/usr/include/signal.h:113: error: undefined reference to 'bsd_signal'
collect2: error: ld returned 1 exit status
TMI: İşte bsd_signal
platforms/android-9/arch-x86/usr/lib/libc.a
arasında signal.o
bileşeninde tanımlanır gibi bana bakıyor benim gradle.build dosyası
apply plugin: 'com.android.model.application'
model {
repositories {
libs(PrebuiltLibraries) {
Superpowered {
binaries.withType(StaticLibraryBinary) {
def prefix = "src/main/jniLibs/Superpowered"
headers.srcDir "${prefix}"
if (targetPlatform.getName() == "armeabi-v7a")
staticLibraryFile = file("${prefix}/libSuperpoweredAndroidARM.a")
else if (targetPlatform.getName() == "arm64-v8a")
staticLibraryFile = file("${prefix}/libSuperpoweredAndroidARM64.a")
else if (targetPlatform.getName() == "x86_64")
staticLibraryFile = file("${prefix}/libSuperpoweredAndroidX86_64.a")
else if (targetPlatform.getName() == "X86")
staticLibraryFile = file("${prefix}/libSuperpoweredAndroidX86.a")
}
}
}
}
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.3"
sources {
main {
jni {
dependencies {
library "Superpowered" linkage "static"
}
}
}
}
ndk {
ldLibs.addAll(['log', 'android', 'c'])
}
defaultConfig {
applicationId = "edu.ucdavis.auditoryenhancer"
minSdkVersion.apiLevel = 22
targetSdkVersion.apiLevel = 23
versionCode = 1
versionName = "1.0"
}
}
android.ndk {
moduleName = "native"
}
android.buildTypes {
release {
minifyEnabled = false
proguardFiles.add(file("proguard-rules.pro"))
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
}
olmakla bile c
dahil olmak üzere benim ldLibs
çağrı ile hata alıyorum.
__ ANDROİD __ #include #include #include Evet, tabii, benim cevap kodunda bunları atalım –
@AntonPechenko #endif #include. –
bsd_signal bulunmadığında, bunlardan biri her zaman kullanılabilir olduğundan, dlsym yoluyla sinyal yüklemeye çalışmak mantıklı olmaz mıydı? Bsd_signal'ın, Android 7.0'a kadar olan aygıtın libc.so'sında bulunduğunu ve bsd_signal'ın r13'te geri geldiğini anlıyorum, ancak Android cihazlarındaki büyük çeşitlilik nedeniyle bu, makul bir koruma gibi görünüyor. Herhangi bir olumsuz sonuç olur mu? –