救命啊救命啊, 两种装载动态链接库的区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了救命啊救命啊, 两种装载动态链接库的区别?相关的知识,希望对你有一定的参考价值。

有一动态链接库libxxx.so, 里面提供了一个sayhello()函数,请问下面两种方式有什么区别?方式一:main.cint main() sayhello(); return 0;gcc -lxxx main.c; --编译连接时使用 -l进行连接这种方式实在不理解, 但也是用得最多的,比如我们的-lpthread -lm等等等。。。若libxxx.so代码变更重新编译, 我们也重新编译main.c会发现其md5值和之前的不一样。方式二:int main() handle = dlopen("libxxx.so", RTLD_NOW); p_sayhello = dlsym(handle, "sayhello"); (*p_sayhello)();gcc -ldl(这个是dlopen的库) main.c --编译连接时不使用 -l进行连接,而是在程序执行时动态打开。这种方式有点在于动态库变化时,不必编译main.c缺点是:1.如果动态库中有很多函数,那么每个函数都要进行dlsym,取出其地址十分麻烦 2.请补充

我知道区别了-l 相当于静态库,仅在链接的时候装载,不过不是合并入主程序本身(区别于静态库),而是直接将动态库的内容装入内存。 如果动态库在程序执行过程中改变了,程序依然使用的内存中的库。也就是所动态库的后继变更仅仅体现在so这里面,但是主程序在执行的时候依然使用内存中的动态库。dlopen 则是每次都直接从文件系统重新装载动态库。 参考技术A 回复 2# lrita 这个区别我也知道,请问除此之外还有什么?

大佬们救命啊 在线急等

技术分享图片

以上是关于救命啊救命啊, 两种装载动态链接库的区别?的主要内容,如果未能解决你的问题,请参考以下文章

******************救命啊*******************

linux高手,请教一个问题啊!!救命,搞了一天了

IT高手救命啊!

大佬们救命啊 在线急等

救命~~ asp.net调试时,无法定位到dll中的类。 搞了一天啦,, 救命啊~~~

救命啊....急急急!!!