在编译静态库(lib)时,遇到过的三种问题:
1, 如果没有正确包含lib文件的路径,会提示无法打开静态库。
2, error LNK 2001: 有可能是路径问题,或者是头文件与lib库不对应,或者是lib文件有问题。
3, error LNK 2005: 这个错误是微软设计错误,因此如果遇到这个错误,我们只能躲过这个链接错误。具体的办法就是将那个提示出错的库放到另外一个库的前面。另外选择不同的C函数库,可能会引起这个错误。MS, C有两种C函数库,一种是普通的函数库:LIBC.LIB,不支持多线程。另外一种是支持多线程的:msvcrt.lib。如果一个工程里,这两种函数库混合使用,可能会引起这个错误。因此建议使用支持多线程的msvcrt.lib。
需要注意的是,当使用其他的库的时候最容易产生这种错误,例如boost和wxWindow使用/MD来编译的,也就是使用支持多线程的C函数库。这时候如果自己的程序没有指明/MD的话,就会提示两种C函数冲突,并且还有LNK2005错误。因此如果使用boost,wxWindow的话,需要指明/MD。
我在工程设置中,把出错的静态库,在工程设置中放在了所有库的最前面,结果真的没有问题了。