文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>A Summary of Dynamic Linux Libraries

A Summary of Dynamic Linux Libraries

时间:2009-05-19  来源:sky_flying

 Compile DLL:
$CXX -Wall -fPIC -I$PATH_INCLUDE -L$PATH_LIB  -c *.cpp
$CXX -shared -I$PATH_INCLUDE -L$PATH_LIB -lotherlibname  -Wl,-soname,libctest.so -o libctest.so   *.o

ctest.h:

// Class factory "C" functions
//----------------------------------------------------------------------
// construct and destruct the object. 
//----------------------------------------------------------------------
typedef Abc* create_t();
typedef void destroy_t(Abc*);

Compile  a App with DLL:
main.cpp:

    void *lib_handle;
    char *error;
   
error_handle:
    if (func_num > 0)
    {
      fprintf(stderr, "func_num=%d, %s\n", func_num, error);
      exit(1);
    }

    lib_handle = dlopen("libVLCMedia.so", RTLD_LAZY);
    if ((error = dlerror()) != NULL) 
        goto error_handle;

    //create
    create_t *createM = (create_t *) dlsym(lib_handle, "create");
    if ((error = dlerror()) != NULL) 
        goto error_handle;

    Abc *abcM = createM();

    //  destroy.
    //destroy
    destroy_t *destroyM = (destroy_t *)dlsym(lib_handle, "destroy");
    if ((error = dlerror()) != NULL) 
        goto error_handle;

    destroyM(abcM);
   
    //  dlclose
    dlclose(lib_handle);

Compile Method 1:
$CXX *.cpp -o test -I$PATH_INCLUDE -I.   -lctest -L$PATH_LIB -lotherlibname   -lz -lm -lrt -ldl -lpthread

Method 2:
$CXX  -rdynamic *.cpp -o test -I$PATH_INCLUDE -I.  -L$PATH_LIB -lotherlibname   -lz -lm -lrt -ldl -lpthread

Links:
"Writing DLLs for Linux apps":
http://www.ibm.com/developerworks/linux/library/l-dll.html 

"Static, Shared Dynamic and Loadable Linux Libraries":
http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

Main Ideas:

1.
Dynamically Linked "Shared Object" Libraries: (.so)

How to generate a shared object: (Dynamically linked object library
file.) Note that this is a two step process.

     1. Create object code
     2. Create library
     3. Optional: create default version using a symbolic link.
Library creation example:
        gcc -Wall -fPIC -c *.c
            gcc -shared -Wl,-soname,libctest.so.1 -o libctest.so.1.0   *.o
            mv libctest.so.1.0 /opt/lib
            ln -sf /opt/lib/libctest.so.1.0 /opt/lib/libctest.so
            ln -sf /opt/lib/libctest.so.1.0 /opt/lib/libctest.so.1
                 
        This creates the library libctest.so.1.0 and symbolic links to
        it.
       
        Compiler options:
       
              * -Wall: include warnings. See man page for warnings
                specified.
              * -fPIC: Compiler directive to output position independent
                code, a characteristic required by shared libraries.
                Also see "-fpic".
              * -shared: Produce a shared object which can then be
                linked with other objects to form an executable.
              * -W1: Pass options to linker.
                In this example the options to be passed on to the
                linker are: "-soname libctest.so.1". The name passed
                with the "-o" option is passed to gcc.
              * Option -o: Output of operation. In this case the name of
                the shared object to be output will be
                "libctest.so.1.0"
       
        Library Links:
       
              * The link to /opt/lib/libctest.so allows the naming
                convention for the compile flag -lctest to work.
              * The link to /opt/lib/libctest.so.1 allows the run time
                binding to work. See dependency below.

Compile main program and link with shared object library:

        Compiling for runtime linking with a dynamically linked
        libctest.so.1.0:
        gcc -Wall -I/path/to/include-files -L/path/to/libraries prog.c -lctest -o prog
        Use:
            gcc -Wall -L/opt/lib prog.c -lctest -o prog
             
        Where the name of the library is libctest.so. (This is why you
        must create the symbolic links or you will get the error
        "/usr/bin/ld: cannot find -lctest".)
        The libraries will NOT be included in the executable but will be
        dynamically linked during runtime execution.
       
Run Program:

      * Set path: export LD_LIBRARY_PATH=/opt/lib:$LD_LIBRARY_PATH
      * Run: prog

2. Details to refer:
Dynamic loading and un-loading of shared libraries using libdl:
C++ class objects and dynamic loading:
Dynamic loading of C++ classes:

相关阅读 更多 +
排行榜 更多 +
挖掘机卡车

挖掘机卡车

模拟经营 下载
我的汤姆猫小米版

我的汤姆猫小米版

模拟经营 下载
我的小小邮轮

我的小小邮轮

模拟经营 下载