自己写了一个RSA密钥生成的工具小工具,采用了MFC来编写,IDE用的vs2012,rsa的代码采用的是polarssl中的rsa部分的源码,非常感谢polarssl提供了这么优秀的源代码
工具以及源码我会发送到csdn上面,
下面主要说一下我在编写程序时遇到的问题
1.字符集的问题,这个问题的出现主要是因为对mfc的不了解,vs2012在编写mfc的时候默认支持了unicode字符集的编码,在显示的时候遇到了很多问题。这个问题没有深究,所以只是提一下。
2,遇到了一个预编译头的问题,由于c和c++的编译是有差别的,而且预编译头可以大大加快编译速度,提高了编程的速度,在采用mfc的时候默认会有一个stdafx.h的编译头,但是我添加的rsa代码是没有编译头的,所以在编译的时候报了错:1>sha1.c : fatal error C1853: “Release\RSA_PC.pch”预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反),这个是因为预编译头不同造成的,新版本的编译器不支持多个编译头,所以就报了这个错误,
我的解决方案是:mfc中有cpp文件也有c文件,我的方法是选中rsa的c代码右键--》属性--》C/C++--》预编译头--》预编译头--》不使用预编译头,再次编译这个问题不见了,这个问题对于小问题来说可以适用,但是对于文件很多的时候,推荐还是将需要的代码编译成库,然后将库添加到工程中去。
3,我想让我的项目能够在其它电脑上面使用,在网上搜索了一下,发现有个方法可以:就是使用静态库来编译,这个编译出来的东西虽然大了一些,但是能够独立的在其他电脑上面使用了。具体的步骤是:项目--》属性--》配置属性--》常规--》MFC的使用--》在静态库中使用MFC,重新编译连接,发现又出了问题:
1>nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) 已经在 LIBCMT.lib(new.obj) 中定义
1>nafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) 已经在 LIBCMT.lib(delete.obj) 中定义
1>nafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) 已经在 LIBCMT.lib(delete2.obj) 中定义
1>D:\work\yuanxx\日志分析\logExtractTool\Release\logExtractTool.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
然后我在网上查了一下:找到了一个解决方法:
解决方法:强制链接器按照正确的顺序链接库!
项目->属性->链接器->输入->附加依赖项,添加:libcpmt.lib nafxcw.lib。
项目->属性->链接器->输入->忽略特定想,添加:nafxcw.lib libcpmt.lib。