静态库编译和连接遇到的奇怪问题
2007-12-25 20:19
274 查看
在编译静态库(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。
我在工程设置中,把出错的静态库,在工程设置中放在了所有库的最前面,结果真的没有问题了。
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。
我在工程设置中,把出错的静态库,在工程设置中放在了所有库的最前面,结果真的没有问题了。
相关文章推荐
- 静态库编译和连接遇到的奇怪问题
- 手动编译连接汇编程序遇到的问题
- mingw手工编译wxWidgets遇到的奇怪问题,及解决方案
- 编译OpenGL程序遇到的一个奇怪问题
- 蘑菇街TeamTalk编译连接过程中遇到的问题及解决方法(iOS)
- 蘑菇街TeamTalk编译连接过程中遇到的问题及解决方法(iOS)
- linux 静态库的编译和连接过程遇到的问题
- 选debug(for KITL)编译工程遇到的奇怪问题
- TeamTalk编译连接过程中遇到的问题及解决方法(iOS)(1)
- Windows下编译Chrome遇到的奇怪的问题
- Coding编译连接过程中遇到的问题及解决方法(iOS)
- 静态编译libcairo.a的时候遇到的依赖库的问题及解决方法
- 静态编译mysql库到程序中遇到的问题
- kerkee demo编译连接过程中遇到的问题及解决方法(iOS)
- iOS遇到的奇怪问题
- ROS中编译通过但是遇到可执行文件找不到的问题
- [交叉编译qt4.8.4 for ARM]遇到到问题
- 解决android使用gson解析json字符串,并使用混淆编译方式打包apk遇到的问题
- 编译VC静态库中遇到的C2859错误解决方案
- 在hdfs创建目录时遇到的连接问题