zoukankan      html  css  js  c++  java
  • Linux G++如何使用动态链接库

    假设文件内容如下:

    +main.cpp         //源文件

    +ZY_FtdcMdApi.cpp   //源文件

    +ZY_FtdcMdApi.h   //头文件

    traderapi                     //子文件夹

       ++apiheader.h       //头文件 

       ++libthostmduserapi.so      //动态链接库

    那么编译过程是:

    g++ -o m main.cpp ZY_FtdcMdApi.cpp -I./traderapi/ -L./traderapi -lthostmduserapi
    

    -I./traderapi/是源码中使用到的头文件的路径

    -L./traderapi 是使用到的动态链接库的路径

    -lthostmduserapi 是动态链接库,注意动态链接库本身必须是libXXXX.so这种写法,编译的时候省略"lib"和".so"

    补录1:

    运行的时候有可能可执行文件m找不到动态链接库,出现如下错误:

    ./m: error while loading shared libraries: libthostmduserapi.so: cannot open shared object file: No such file or directory

    这是因为程序默认会到/lib64/目录中找动态链接库,而程序中所使用的的thostmduserapi.so不在/lib64/中。因此需要增加如下命令,让程序也到指令的目录中找库

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./traderapi

    补录2:

    如果不喜欢-lthostmduserapi这种写法,或者不习惯动态链接库的lib打头。也可以将lib去掉,直接携程XXXX.so只是编译的时候,需要将动态链接库当做.cpp文件来编译。

    假设动态链接库的名字是thostmduserapi.so,那么编译命令:

    g++ -o m main.cpp ZY_FtdcMdApi.cpp ./traderapi/thostmduserapi.so -I./traderapi/ 
    

    且这种方法不会发生“补录1”中问题。挺好的。

  • 相关阅读:
    UVa 820 因特网带宽(最大流)
    UVa 1001 奶酪里的老鼠(Dijkstra或Floyd)
    UVa 821 网页跳跃(Floyd)
    UVa 11624 大火蔓延的迷宫
    UVa 10881 蚂蚁
    UVa 11300 分金币
    UVa 11729 突击战
    《额尔古纳河右岸》读书笔记
    HDU 1083 Courses(二分图匹配模板)
    UVa 10618 跳舞机
  • 原文地址:https://www.cnblogs.com/dongfangchun/p/9078751.html
Copyright © 2011-2022 走看看