标签:dynamic-linking gcc static-linking c-3 linux
我从彼得·范·德·林登(Peter Van Der Linden)的书(《专家C编程:深入C的秘密》)中学到,有一些特定的库是必须进行动态链接的;这些库是哪些,以及为什么要强制它们动态链接?(更具体地讲,在GNU / Linux系统)
解决方法:
Which are these libraries
所有UNIX系统都保证向后兼容;也就是说,在较旧的系统上构建的二进制文件将继续运行并在较新的系统上运行.但是,此保证仅适用于与系统库动态链接的二进制文件.
why they are mandatorily dynamically linked
之所以有此限制,是因为用户级程序通常不直接进行系统调用,而是调用libc包装程序例程.因此,只要系统库也进行了更新,UNIX供应商可以自由地对syscall接口进行不兼容的更改(例如,修复错误).通常,此类更改仅在升级到新的OS版本时发生,例如从Solaris 2.6升级到2.7.
Linux上的画面比我上面描述的还要复杂,因为glibc的一个版本由大约200个独立的二进制文件组成,所有二进制文件必须完全匹配.静态链接一个这样的片段,然后在其他片段不匹配的系统上运行会产生无法预测的结果;在libc中经常崩溃.
摘要:除非您知道自己在做什么并且有充分的理由这样做,否则切勿将UNIX系统库静态链接到可执行文件中.
标签:dynamic-linking,gcc,static-linking,c-3,linux 来源: https://codeday.me/bug/20191208/2092858.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。