es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo cargar la biblioteca .SO en un proyecto Flutter.

Estoy tratando de vincular un archivo de biblioteca compartida precompilada llamado librandomnumber.so en mi proyecto.
código para CMakeLists.txt:

link_directories('lib/native_Library/librandomnumber.so')

add_library(native-lib librandomnumber.so)

target_link_libraries(native-lib librandomnumber.so)

código para cargar la biblioteca:

import 'dart:ffi';

import 'dart:io';



typedef fetch_number_func = Int32 Function();
typedef FetchNumber = int Function();



class FfiService {
  get updateLocationsCommand => null;
  Object fetchRandomNumber() {

      if (Platform.isAndroid){

        print("ahora voy a cargar la biblioteca");
        final DynamicLibrary nativeAddLib = Platform.isAndroid
            ? DynamicLibrary.open('native-lib.so')
            : DynamicLibrary.process();
        print("sdgahhgjhdgajh" + nativeAddLib.toString());
        final fetchNumberPointer =
        nativeAddLib.lookup<NativeFunction<fetch_number_func>>(
          'fetch_number',
        );

        return fetchNumberPointer;
      }
      else {
        (exc){
        DynamicLibrary.process();
        print('Algo salió mal en fetchRandomNumber ${exc.toString()}');
      };
      }
      return 0;
  }


}

Se muestra el siguiente error:

error:
Argumento(s) no válido(s): Error al cargar la biblioteca dinámica ‘native-lib.so’: dlopen fallido: biblioteca “native-lib.so” no encontrada.

¿Me podrías dar las soluciones, por favor?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que el archivo de biblioteca compartida “native-lib.so” no fue encontrado. Aquí hay algunas posibles soluciones:

    1. Asegúrese de que el archivo “native-lib.so” exista en la ubicación correcta. El archivo CMakeLists.txt se está vinculando a “lib/native_Library/librandomnumber.so”, que puede ser diferente de donde se encuentra “native-lib.so”. Verifique la ruta del archivo y asegúrese de que esté en el directorio correcto.
    2. Verifique que el archivo de biblioteca compartida sea compatible con la plataforma objetivo. El mensaje de error menciona Platform.isAndroid, por lo que es posible que el archivo “native-lib.so” no se haya compilado para Android. Asegúrese de que el archivo haya sido compilado para la plataforma objetivo y la arquitectura.

    3. Verifique que los permisos de archivo estén configurados correctamente. Si el archivo existe en la ubicación correcta pero aún no se encuentra, es posible que los permisos de archivo no estén configurados correctamente. Asegúrese de que el archivo sea legible por el usuario que ejecuta la aplicación.

    4. Intente utilizar la ruta completa del archivo de biblioteca compartida. En lugar de pasar solo “native-lib.so” a DynamicLibrary.open(), intente pasar la ruta completa del archivo. Por ejemplo, si el archivo se encuentra en “/data/app/com.example.myapp/lib/nativelib”, entonces pasaría esa ruta completa a DynamicLibrary.open().

    Esperemos que una de estas soluciones ayude a resolver el problema.

Comments are closed.