摘要:
参考资料:《程序员的自我修养》3.5.3以及3.5.4小节。符号修饰的由来20世纪70年代以前,编译器编译代码时产生的目标文件中,符号名与相应的变量和函数的名字是一样的,随着编程语言的发展,例如C语言,如果一个C语言程序要使用这些库的话,其自身就不能使用这些库中已经声明了的函数和变量的名字作为符号名,否则将会跟现有的目标文件发生名称冲突。为了防止这类符号名冲突,各平台下的编程语言规定了各自的符号生成语法。如C在UNIX下在函数名和变量前加下划线作为符号名。这种给函数名增加特定符号来使其符号名唯一的方式就是符号修饰。这种简单的符号修饰没有从根本上解决符号冲突的问题,比如同一种编程语言编写的目标文 阅读全文
摘要:
windows中,链接库分为两种类型:静态链接库.lib和动态链接库.dll。其中动态链接库在被使用的时候,通常还提供一个.lib,称为引入库,它主要提供被Dll导出的函数和符号名称,使得链接的时候能够找到dll中对应的函数映射。静态链接库和动态链接库的作用相似,都是提供给其他程序进行调用的资源。其中,动态链接库的调用方法分隐式调用(静态导入调用)和显示调用(动态导入调用)。参考资料:孙鑫 《VC++深入详解》视频教程第十九课。编译环境:Microsoft Visual Stdio 2010DLL导出符号例,首先生成一个dll1.dll和dll1.lib// DLL1工程,dll1.cpp// 阅读全文