1.代码生成的相关问题
每当调用第三方库生成DLL动态库时,总是需要将代码生成的模式调成一致,那么在这里代码调试的模式分别代表什么呢?在VS项目工程中一共有三种模式四种模式可选,分别是多线程(/MT)、多线程调试(\MTd)、多线程(\MD)、多线程调试(\MDd)四个选项,现在已经不提供单线程版本的代码生成选项了。
在我们写程序的时候,比如打开文件,这时候就需要系统底层库的支持,windows下C底层库为多线程静态Release版本 LIBCMT,多线程静态Debug版本 LIBCMTD,多线程动态Release版本 MSVCRT,多线程动态Debug版本 MSVCRTD,这样就对应上面说的VS中代码调试的四个版本,
多线程(/MT)其实就是引用底层库是静态版本 LIBCMT;
多线程调试(\MTd)是引用静态调试版本LIBCMTD;
多线程(\MD)引用底层库动态版本MSVCRT;
多线程(\MDd)是引用动态调试版本MSVCRTD。
如果我们的程序使用了不同代码生成的的DLL动态库时会报库冲突等等错误,如果我们的程序我们的程序使用了高版本VS编译的第三方库会报找不到相应的C底层库,找不到MSVCRT140等等错误,在vs项目工程中有时还会遇到一些msvcr msvcp等不同的库,这些都是不同的编译器(VC、vc++)对运行时库(CRT库,像MSVCRT)进行的封装,msvcr是C库,msvcrp是C++库。
2.附加包含目录和附加库目录
使用相对路径是两个点表示上层,一个点表示当前目录,相对的是项目文件所在的目录即vcproj文件所在的目录 。
3.log4cpp的使用问题
在使用log4cpp时发现两个问题,
首先,头文件包含中要多一层目录,因为在源码中引用头文件时是/log4cpp/..这种形式的,其次log4cpp不允许多次初始化。