链接静态库的问题
最近在整理前人写的模块代码,将几个不同功能的模块统一成一个接口,
提供给别人使用。为了内部修改方便以及外面使用方便,在Wondows平台下,很
自然的就想到将内部每个不同的功能模块编译成独立的若干静态库文件(lib),
然后再将这几个静态库文件整合成一个动态库文件(dll)。
这样内部各个模块可以让不同的人来维护,修改后的模块在单独编译,最后
再重新生成dll文件,外面使用者要在自己的工程中调用动态库,只需替换dll文
件,而无需再重新编译自己的工程代码。这样既可以将底层具体实现做了一个封
装,使得外界调用和内部维护独立开来,方便代码管理。
但是在编译各个模块后,形成若干个lib库文件,最后将这些lib库文件链接
编译时,发现出错。提示库文件冲突。
以前由于编写的工程很小,没有遇到过这个问题。所以当时很郁闷,以为是
头文件冲突,仔细察看了各个文件头包含,发现没有问题。后来在师兄的提醒下
才发现是静态库版本的问题。
我是用VC.net的开发环境,仔细看了一下各个模块工程的生成静态库版本选
项,发现居然有6个选择版本:单线程,单线程调试,多线程,多线程调试,多线
程DLL,多线程DLL调试。(VC6.0下生成静态库也有这么多选择)
而环境默认静态库生成单线程调试,而动态库则为多线程调试,所以两个版
本就有可能发生引用库版本冲突,在单线程版本使用的STL类库和多线程版本使用
的STL类库发生冲突。所以连接时候就出错了。
将静态库统一设置为多线程,将动态库也设置为多线程,最后就编译成功了。