AIX上dlopen實例

main.c
-------------------
 
#include <dlfcn.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
 
extern void defsym(void);
 
int main( int argc, char** argv )
{
  void* handle;
  void* symptr;
  /*** load the shared object containing the definition of the ***/
  /*** function defsym.                                        ***/
  if ( NULL == ( handle = dlopen( "./libdefsym.so", RTLD_NOW ) ) ){
          perror( dlerror() );
          exit( 1 );
  }
  /*** The deferred resolution of the func defsym should have ***/
  /*** been resolved by the abve load.                        ***/
  defsym();
  /*** Unload the previously loaded shared object.            ***/
  if ( 0 != ( dlclose( handle ) ) ) {
          perror( dlerror() );
          exit( 1 );
  }
  exit( 0 );
}
 
defsym.c
-----------------
#include <stdio.h>
#include <stdlib.h>
 
void defsym(){
        printf( "defsym called.\n" );
}
 
defsym.imp
-----------------
#!
defsym
 
Makefile
-----------------
CC=gcc -maix64
 
all: main libdefsym.so
 
main: main.o
        $(CC) -o main -Wl,-bI:defsym.imp main.o
 
main.o: main.c
        $(CC) -c main.c
 
libdefsym.so: defsym.o
        #ld -b64 -G -bnoentry -bexpall -o libdefsym.so defsym.o -lc
        $(CC) -Wl,-G -Wl,-bnoentry -Wl,-bexpall -o libdefsym.so defsym.o -lc
 
defsym.o: defsym.c
        $(CC) -c defsym.c
 
.PHONY: clean
clean:
        rm *.o *.so main
 
 如果想用.a的庫,只需做如下修改:
修改main.c中的dlopen
dlopen( "./libdefsym.a(libdefsym.so)", RTLD_NOW | RTLD_MEMBER )
修改Makefile
CC=gcc -maix64
 
all: main libdefsym.a
 
main: main.o
        $(CC) -o main -Wl,-bI:defsym.imp main.o
 
main.o: main.c
        $(CC) -c main.c
 
libdefsym.so: defsym.o
        #ld -b64 -G -bnoentry -bexpall -o libdefsym.so defsym.o -lc
        $(CC) -Wl,-G -Wl,-bnoentry -Wl,-bexpall -o libdefsym.so defsym.o -lc
 
libdefsym.a: libdefsym.so
        ar -X64 -v -q libdefsym.a libdefsym.so
 
defsym.o: defsym.c
        $(CC) -c defsym.c
 
.PHONY: clean
clean:
        rm *.o *.so main *.a
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章