VC编译选项
今天练习VC编译选项设置。现在有三个工程A、B和C;A和B是链接库,C是EXE的demo程序。B调用A,C调用B。
1.最初的编译是:A、B编为动态库,并生成LIB,C包含这个LIB,生成EXE。
这样是简单的,C的项目设置LINK属性页、Category为Input的选项中,填入A与B的LIB就可以了。
需要注意的是,在这里用到了多线程,在C/C++属性页中、Category为Code Generation的选项中,Use run-time Library需要选择MuiltiThreaded。而DEBUG版选择对应的DEBUG MultiThreaded。
微软网站上说,Release版的run-time库与Debug版的run-time库是不同的,所以当你在B中用release而调用的却是A工程生成的debug版LIB;或是在B中用Debug而调用的却是A工程生成的Release版LIB,将会有警告:
LINK : warning LNK4098: defaultlib "LIBCMT" conflicts with use of other libs; use /NODEFAULTLIB:library
2.现改为:A编成静态库,B为动态库,C只要包含B就可以了,不用A。
要让A成为静态库,需要另起一个工程,在VC建项目向导中选择最后一项:static library,这样在project的setting对话框中就没有Link属性页,取而代之的是Lib属性页。
A生成好静态的LIB后,B只要引用该LIB就可以了。