What’s the deal with OLDNAMES.LIB?

栏目: IT技术 · 发布时间: 6年前

Set the time machine to 1988. The C language has not yet been standardized. Everybody had their own libraries for doing stuff, and some of them even pretended to be compatible with each other. The Microsoft C compiler, for example, came with a bunch of functions like unlink and stat to provide sort-of compatibility with Unix-sort-of source code.

And then the C standard was ratified in 1989. Now things got interesting, because those functions were not part of the C standard. Standard-conforming C programs were welcome to define functions with those names, and the rules say that this is perfectly legal and are not references to the identically-named Unix-like functions.

Now, there was a lot of code written for the Microsoft C toolchain that used these sort-of-Unix-ish functions, and renaming those functions would cause those programs to break.

So should we rename the Unix-ish functions in the Microsoft C library, in order to conform to the C standard? Or should we leave the functions in the Microsoft C library under their pre-standard names, to keep existing code working?

Let’s do both !

The Microsoft C library renamed these Unix-ish function to have a leading underscore. So unlink became _unlink , and so on. A program that didn’t use the Unix-ish library functions could define its own function called unlink , and everything would work just fine. But if the program actually wanted to use the unlink function from the Unix-ish library, this magic library OLDNAMES.LIB would step in.

The OLDNAMES.LIB library doesn’t contain any code of its own. Rather, it contains name redirections that say, “Hey, I have a symbol called unlink , in case you were looking for it. Wait, you want to know what this symbol represents? Um, it represents a symbol named _unlink . Good luck with that.”

If the linker cannot find a symbol named unlink , it turns to OLDNAMES.LIB as a library of last resort, and that library resolves the symbol unlink , but replaces it with an unresolved symbol named _unlink . The linker then goes through the symbol resolution process again, and this time it finds _unlink in the regular C library.

The net result is that your attempt to call the function unlink got redirected to the function _unlink , but only if you didn’t already have a function named unlink .

You can suppress the OLDNAMES.LIB library in various ways, most notably by passing the /NODEFAULTLIB flag, which can be abbreviated to the somewhat enigmatic /NOD .


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

MATLAB数值计算

MATLAB数值计算

莫勒 / 喻文健 / 机械工业出版社 / 2006-6 / 35.00元

《MATLAB数值计算》是关于数值方法、MATLAB软件和工程计算的教材,着重介绍数学软件的熟练使用及其内在的高效率算法。主要内容包括:MATLAB介绍、线性方程组、插值、方程求根、最小二乘法、数值积分、常微分方程、傅里叶分析、随机数、特征值与奇异值、偏微分方程。《MATLAB数值计算》配备大量MATLAB例子源代码及习题,其中涉及密码学、Google网页分级、大气科学和图像处理等前沿问题,可以帮......一起来看看 《MATLAB数值计算》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具