首先,是不是已经确知了c/c++怎么编译的?
在c中call一个函数或者使用一个全局变量,实际使用的是符号,编译器会找到这个符号所代表的函数所在.在静态库lib中,保存着所有的符号,因此,这和c编译没有差别;动态库中才存在寻找函数入口的问题.当然,动态库会提供寻地址机制,应用需要根据函数名来寻址,一般在Load一个dll后,使用GetProcess来找到入口地址.对于c++,情况稍微有点不同,就是它的符号的格式和c不同,比如会在前后加一些独特的字符.这也是extern "c"存在的理由,这个声明告诉编译器,请按照c的格式来生成使用符号,从而c和c++可以兼容.
其次,关于不同架构,不同编译器,不同lib格式. lib本质上只是obj的一个集合,所以,肯定的,不同架构的lib不能通用,比如,arm的lib自然不能在mips上面使用.
编译器和lib格式是同一个命题.对此了解不多,是否存在一个严格统一标准.(我想是存在的.)在windows下不要过于担心,ms说的算.大家自然要统一到它的标准.不然用不了它的库.不过,一般我们也不会这么时空错乱,交叉编译使用不同格式的库.
补充,库文件的产生,我理解,是源码形式上更高一个层级的模块化和封装,是一种思想升级后很自然的产物. |