我在C:\ cryptopp中下载并提取了Crypto ++.我使用Visual Studio Express 2012来构建内部的所有项目(按照自述文件中的说明),并且所有内容都已成功构建.然后我在其他文件夹中创建了一个测试项目,并添加了cryptolib作为依赖项.之后,我添加了包含路径,因此我可以轻松地包含所有标题.当我尝试编译时,我收到有关未解析符号的错误.
为了解决这个问题,我添加C:\cryptopp\Win32\Output\Debug\cryptlib.lib了链接其他依赖项.现在我收到这个错误:
Error 1 error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in program.obj C:\Data\Work\C++ VS\CryptoTest\CryptoTest\cryptlib.lib(cryptlib.obj) CryptoTest
Error 2 error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in program.obj C:\Data\Work\C++ VS\CryptoTest\CryptoTest\cryptlib.lib(iterhash.obj) CryptoTest
Error 3 error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in program.obj C:\Data\Work\C++ VS\CryptoTest\CryptoTest\cryptlib.lib(sha.obj) CryptoTest
Error 4 error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' …Run Code Online (Sandbox Code Playgroud) 在安装和使用 google protobuf 库(在 Windows 上安装 Protobuf)的说明页面上,它指出:
如果您的项目本身是供第三方软件使用的 DLL,我们建议您不要在库的公共接口中公开协议缓冲区对象,并且将协议缓冲区静态链接到您的库中。
我想知道如何做到这一点。据我所知,您可以通过两种方式构建 google protobuf:静态和动态。
如果您动态构建它,您将面临上述问题。如果您静态构建它,那么您将使用多线程 (/MT) 的Visual Studio 中的代码生成类型。这意味着在我的 dll 库(它是用多线程 DLL (/MD)构建的)中,您将收到以下链接器错误:
错误 LNK2038:检测到“RuntimeLibrary”不匹配:值“MTd_StaticDebug”与 Emulator.obj 中的值“MDd_DynamicDebug”不匹配
现在有几个问题涉及如何解决这个问题:
但答案通常是,更改您的库以匹配其他库的构建类型。问题是,我不想那样做,我想要一个 DLL。我想静态链接 google protobuf,如他们的文档中所述。我怎样才能做到这一点?