Red de conocimiento informático - Aprendizaje de programación - Linux c así lo llama

Linux c así lo llama

Código de muestra (soTest.c):

1 #include

2 #include

3

4 int main(int argc, char *argv[]){

5 void * libm_handle = NULL;

6 float (*cosf_method)(float); p>

7 char *errorInfo;

8 float result;

9

10 // La función dlopen también analizará automáticamente el * **disfruta de dependencias de biblioteca en. De esta forma, si el objeto que abres depende de otras bibliotecas de ***enjoy, las cargará automáticamente.

11 // La función devuelve un identificador para llamadas API posteriores

12 libm_handle = dlopen("libm.so", RTLD_LAZY );

13 // Si se devuelve un identificador NULL, significa que no se puede encontrar el archivo objeto y el proceso finaliza. De lo contrario, se obtendrá el identificador del objeto y se podrá consultar más el objeto

14 if (!libm_handle){

15 // Si se devuelve un identificador NULL, el dlerror El método se puede utilizar para obtener el objeto inaccesible.

16 printf("Open Error:%s.\n ",ddlerr());

17 return 0;

18 }

19

20 // Utilice la función dlsym para intentar analizar símbolos en el archivo objeto recién abierto. Obtenga un puntero válido al símbolo u obtenga NULL y devuelva un mensaje de error

21 cosf_method = dlsym(libm_handle, "cosf");

22 errorInfo = dlerror(); // Llama al método dlerror y devuelve el mensaje de error y borra la memoria al mismo tiempo

23 if (errorInfo != NULL){

24 printf("Dlsym Error:% s.\n",errorInfo) ;

25 return 0;

26 }

27

28 // Ejecutar "cosf " método

29 resultado = (*cosf_method)(0.0);

30 printf("resultado = %f.\n",resultado);

31

32//Después de llamar a la función de destino en el objeto ELF, cierre el acceso a ella llamando a dlclose

33 dlclose(libm_handle);

34

35 return 0;

36 }

El contenido principal de este ejemplo es llamar a la función "cosf" en la biblioteca matemática (libm.so). El segundo parámetro de la función dlopen indica el modo de cargar el archivo de la biblioteca. Hay dos tipos principales: RTLD_LAZY se determina temporalmente y decodifica los símbolos cuando es necesario; RTLD_NOW se determina inmediatamente y decodifica todos los símbolos indecisos antes de regresar. Además, recuerde citar el archivo de encabezado "#include " (^_^) que contiene la API.