Advertisement
Guest User

Untitled

a guest
Aug 21st, 2012
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.17 KB | None | 0 0
  1. a.c:
  2. #include <stdio.h>
  3. #include <dlfcn.h>
  4. #include <assert.h>
  5.  
  6. int external()
  7. {
  8. return 5;
  9. }
  10.  
  11. int main()
  12. {
  13. int (*ptr)();
  14. void *handle = dlopen("./libb.so", RTLD_LAZY|RTLD_GLOBAL);
  15. if (!handle)
  16. {
  17. fprintf(stderr, "%s\n", dlerror());
  18. return 1;
  19. }
  20. #ifdef __FreeBSD__
  21. ptr = (int (*)())dlfunc(handle, "fun");
  22. #else
  23. ptr = (int (*)())dlsym(handle, "fun");
  24. #endif
  25. printf("%d\n", (*ptr)());
  26. return 0;
  27. }
  28.  
  29. b.c:
  30. extern int external();
  31.  
  32. int fun()
  33. {
  34. return external();
  35. }
  36.  
  37. FreeBSD:
  38. [sysnet80:/tmp] steve$ uname -s -r
  39. FreeBSD 9.1-PRERELEASE
  40. [sysnet80:/tmp] steve$ clang -fPIC a.c
  41. [sysnet80:/tmp] steve$ clang -fPIC -c b.c
  42. [sysnet80:/tmp] steve$ clang -shared -o libb.so b.o
  43. [sysnet80:/tmp] steve$ ./a.out
  44. ./libb.so: Undefined symbol "external"
  45.  
  46. Linux:
  47. [hilbert:/tmp] steve$ uname -s -r
  48. Linux 2.6.35-28-generic
  49. [hilbert:/tmp] steve$ clang -fPIC a.c -ldl
  50. [hilbert:/tmp] steve$ clang -fPIC -c b.c
  51. [hilbert:/tmp] steve$ clang -shared -o libb.so b.o
  52. [hilbert:/tmp] steve$ ./a.out
  53. ./a.out: symbol lookup error: ./libb.so: undefined symbol: external
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement