Я перекрестно скомпилировал gsl
для android, используя arm-linux-androideabi
компилятор, следующий за ответом, приведенным в этом question. Я установил библиотеку в /home/username/AndroidGSL
. Я проверил команду file
и он дал мнеdlopen failed: не удалось найти символ «cblas_sdsdot», на который ссылается «libgsl.so»
libgsl.so: symbolic link to `libgsl.so.0.14.0'
так я снова сделал для libgsl.so.0.14.0
и получил этот
libgsl.so.0.14.0: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), not stripped
, который означает, что он составлен правильно для android
. Затем я проверил nm
команды
nm libgsl.so | grep cblas_sdsdot
и я нашел этот символ в библиотеке.
U cblas_sdsdot
Вот как я загружаю библиотеки.
static
{
System.loadLibrary("gnustl_shared");
System.loadLibrary("gslcblas");
System.loadLibrary("gsl");
}
Мой Linux является 64 бит и мой Gradle файл выглядит следующим образом
compileSdkVersion 21
buildToolsVersion '22.0.1'
defaultConfig {
applicationId "com.example.user.ndksample"
minSdkVersion 21
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
«U» на выходе nm сообщает вам, что символ не определен в этом объекте. Возможно, вам нужно загрузить библиотеку cblas перед библиотекой gsl? –
Я тоже сделал это, но все равно не повезло. Любое другое предложение? –
Можете ли вы проверить с помощью 'nm', что символ присутствует в используемой библиотеке gslcblas (должен ли отображаться' T' или 't', если это то, что я принимаю за функцию)? –