免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 833 | 回复: 0
打印 上一主题 下一主题

A Summary of Dynamic Linux Libraries [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-19 11:01 |只看该作者 |倒序浏览
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:
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/86325/showart_1932804.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP