Linux c así lo llama
1 #include
2 #include
3
4 int main(int argc, char *argv[]){
5 void * libm_handle = NULL;
6 float (*cosf_method)(float); p> 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