事不宜迟,我们的情况是:有一个静态库liba_static_old.a,动态库libb_share.so将链接liba_static_old静态库。可执行文件链接动态库libb_share.so。
让我们首先查看源代码:
A_STATIC_OLD.C源代码
#include stdio.h
#include\’a_static_old.h\’
void打印机(void){
printf(\’来自a_static_old \\ n\’的打印信息);
}
b_share.c源代码
#include\’b_share.h\’
#include stdio.h
#include\’a_static_old.h\’
void printer_b(void){
printf(\’b_share调用\\ n\’的打印机);
打印机();
}
main.c源代码
#include\’b_share.h\’
#include stdio.h
#include\’a_static_old.h\’
void打印机(void){
printf(\’Main \\ n\’的“打印信息”);
}
int main(){
打印机_B();
}
我们期望的结果是:运行主机后,输出“ b_share调用打印机”和“来自a_static_old的打印信息”是输出
实际操作结果如下:
我们看到,动态库调用的打印机函数实际上位于主函数中。这是怎么回事?让我们拆卸libb_share.so。
因此,有没有办法使libb_share。链接时不使用符号表?我们可以使用-Bsymbolic链接选项。如下:
用户评论
古巷青灯
刚学会写C++的时候就遇到过好多这种事情!动态库和静态库搞混了,调试好久才发现问题出在链接方式上。这篇文章总结得真不错,应该把这份经验早点学习到!
有9位网友表示赞同!
寻鱼水之欢
每次写项目都要仔细留意代码的依赖关系,不然就会遇到各种奇怪的问题。这篇文章讲得明白,而且很适合新手入门学习。
有10位网友表示赞同!
青墨断笺み
作为一名老手,我也经常栽倒在动态库和静态库的链接方式上。感觉有时候文档写的太官方了,像这样轻松易懂的文章更实用!
有10位网友表示赞同!
猫腻
这篇文章说的“95%软件工程师踩过坑”,真的!我也是其中之一!尤其是在项目复杂的时候,很容易忽略这些细节。感谢作者分享经验,希望更多人能够避免这种尴尬!
有6位网友表示赞同!
你身上有刺,别扎我
说来说去还是绕不开动态库和静态库的连接方式之謎。这个事情确实容易让人头疼,读了这篇文章后感觉对这个问题有了更清晰的认识。
有17位网友表示赞同!
あ浅浅の嘚僾
我曾经遇到过一个很大的项目,因为忘记链接静态库的问题导致崩溃,当时真的着急得不知道怎么办!幸好现在明白了这种问题,以后应该注意一点
有14位网友表示赞同!
不识爱人心
这个"95%"比例太吓人了!还好我还没踩到这个坑,但已经把这篇文章收藏起来学习了。防患于未然永远是明智之举!
有20位网友表示赞同!
迷路的男人
感觉文章写的太笼统了,很多概念没讲清楚。新手看这个文章估计还是一头雾水吧?建议作者能提供更多例子来解释。
有19位网友表示赞同!
箜明
我感觉这篇文章只关注了链接方式本身,没有涉及到项目开发中的一些实际案例和场景应用。如果能结合一些实际用例,会更有说服力!
有8位网友表示赞同!
限量版女汉子
虽然我写代码已经很多年了,但还是从这篇文章中学到了不少东西。感谢作者分享这些宝贵经验!
有7位网友表示赞同!
雨后彩虹
动态库和静态库真的太复杂了,感觉总是弄不明白它们的区别和应用场景。希望以后会有更简单易懂的文章讲解这个主题!
有16位网友表示赞同!
疲倦了
我是一个纯粹的Java开发者,很少接触C++项目。读完这篇文章,我对C++ 中动态库和静态库的问题也有了一定的了解。感谢作者的辛勤付出…
有16位网友表示赞同!
话少情在
这篇文章真的太棒了,简洁明了地讲解了动态库和静态库的关键概念,还提供了很多实用技巧。对于想要学习编程的新人来说,这是一篇必读的文章!
有11位网友表示赞同!
青衫负雪
作为一个资深程序员,我以前对链接方式非常熟悉,但看到这篇文章后,我发现自己仍然可以从中学到一些新的知识。感谢作者的总结,很有意义!
有9位网友表示赞同!
丢了爱情i
如果能解释一下在C++标准库中如何使用动态库和静态库,那真是太棒了!
有9位网友表示赞同!