我有第三方应用程序与源,目前设置为针对libeay32MD.lib构建.但这是应用程序,而不是库.它不应该是针对libeay32MT.lib构建的吗?两者有什么区别?
库有以下变体:
和"静态"的同名.你能解释一下这些之间的区别吗?
Rob*_*Rob 10
这些变化决定了使用哪个C++库,以及生成了什么类型的代码,尽管只有'M'可用意味着多线程,但是不再有单线程选项.
刚编辑 - 抱歉,代码的顺序错误.
编辑2:更多信息......
这些标志是C++选项,与要求ssleay32.dll和libeay32.dll无关.有一个版本的libeay32 - 4用于静态构建(不依赖于ssl/libeay32.dll),4个用于动态构建(需要ssl/libeay32.dll).4中的每一个都分为所需的C++库类型......
C++可以静态或动态地链接到您的应用程序,对于每种类型,您都可以使用调试库或发布库.
/ MT和/ MTd(静态)不需要C++可再发行代码,因为所有C/C++调用都包含在已编译的程序中.如果您链接的每个模块(不仅仅是ssleay&co.)都使用这些选项,那么您的应用程序将完全独立于C++依赖项.
/ MD和/ MDd(动态)需要在目标计算机上安装C++可再发行DLL.对于/ MD,可以从MSFT轻松下载版本,但是您还需要注意您使用的Visual C++版本 - 例如VC++ 2008,VC++ 2010等.您可能需要许多版本的可再发行组件.对于/ MDd,这些库将在您的开发计算机上,但MSFT没有针对此的一般发布 - 但是如果需要,您可以使用Visual Studio构建自己的安装程序; 通常/ MDd仅供开发人员用于测试.
原始问题中的SSLEAY等版本并未指出使用Visual C++的2005/2008/2010等版本来编译MD版本,但是一旦编译,可以使用依赖性查看器从构建的目标中注明(例如,取决于.可执行程序).例如,如果您的应用程序依赖于MSVCR90.DLL,那么这意味着VC++ 9(令人困惑的是,这是2008年的可再发行组件).
所有开发人员都需要选择静态或DLL库链接,这里有一些注意事项:
静态联动:
动态联动:
当您在库中返回C/C++对象(例如,已分配的内存,std :: string等)时,必须将您的代码与用于编译库的相同标志链接,没有例外.
| 归档时间: |
|
| 查看次数: |
9610 次 |
| 最近记录: |