Linux G++如何使用动态链接库

Posted 东方春

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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”中问题。挺好的。

 

以上是关于Linux G++如何使用动态链接库的主要内容,如果未能解决你的问题,请参考以下文章

[g ++用户定义的动态链接库上的全局new和delete运算符

Linux C++ g++ -ldl编译参数(链接libdl.so动态库,头文件<dlfcn.h>)(Dynamic Linker的缩写)(混链接混合链接)

g++编译使用生成静态库和动态库(Linux)

Linux gcc/g++编译链接头文件和库(动态库.so 和 静态库.a)

喵呜:Linux环境基础开发工具使用篇之Linux开发工具:Linux编译器-gcc/g++使用

Linux 静态链接库和动态连接库