#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
int main(int argc, char **argv)
{
void *handle;
double (*cosine)(double);
char *error;
handle = dlopen ("libm.so", RTLD_LAZY);
if (!handle) {
fprintf (stderr, "%s\n", dlerror());
exit(1);
}
dlerror(); /* Clear any existing error */
cosine = dlsym(handle, "cos");
if ((error = dlerror()) != NULL) {
fprintf (stderr, "%s\n", error);
exit(1);
}
printf ("%f\n", (*cosine)(0));
dlclose(handle);
printf("%x\n", cosine);
func();
return 0;
}
void func()
{
printf("%f\n", cos(0));
printf("%x\n", cos);
}
编译执行
gcc -Wall dlsym.c -lm -ldl && ./a.out
输出:
1.000000
13e19c70
1.000000
400630
这是为何?
