c++ - 将 twitcurl 库从 VS2010 解决方案静态链接到 VS2012 解决方案的问题

标签 c++ visual-studio-2012 twitter static-linking openframeworks

我在将 Twitter API twitcurl 与我的 OpenFrameworks 解决方案集成时遇到了问题。 wiki 说明声明将构建的库静态链接到我的解决方案。这就是我所做的。

我遵循的步骤:

1) 下载 twitcurl 库并在 VS2012 上构建它。解决方案文件基于 VS2010,因此我必须在 2012 年内更新它。构建是作为发布版本。

2) 将 twitcurl.lib 从其发布文件夹静态链接到我的 OpenFrameworks 解决方案。

以下是我在尝试构建它后遇到的错误:

1>twitcurl.lib(oauthlib.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj
1>twitcurl.lib(oauthlib.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value 'MDd_DynamicDebug' in main.obj
1>twitcurl.lib(twitcurl.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj
1>twitcurl.lib(twitcurl.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value 'MDd_DynamicDebug' in main.obj
1>twitcurl.lib(HMAC_SHA1.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj
1>twitcurl.lib(HMAC_SHA1.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value 'MDd_DynamicDebug' in main.obj
1>twitcurl.lib(base64.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj
1>twitcurl.lib(base64.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value 'MDd_DynamicDebug' in main.obj
1>twitcurl.lib(urlencode.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj
1>twitcurl.lib(urlencode.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value 'MDd_DynamicDebug' in main.obj

我从阅读这些错误后了解到,这些错误通常在尝试将发布版本静态链接到调试版本时观察到。随后我尝试了所有其他组合,尝试在 Debug模式下构建 twitcurl,反之亦然。静态链接库的调试版本会给我更多错误,例如:

1>twitcurl.lib(twitcurl.obj) : error LNK2019: unresolved external symbol __imp__curl_slist_free_all referenced in function "public: bool __thiscall twitCurl::oAuthHandlePIN(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?oAuthHandlePIN@twitCurl@@QAE_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
1>twitcurl.lib(twitcurl.obj) : error LNK2019: unresolved external symbol __imp__curl_easy_init referenced in function "public: __thiscall twitCurl::twitCurl(void)" (??0twitCurl@@QAE@XZ)
1>twitcurl.lib(twitcurl.obj) : error LNK2019: unresolved external symbol __imp__curl_easy_setopt referenced in function "public: __thiscall twitCurl::twitCurl(void)" (??0twitCurl@@QAE@XZ)
1>twitcurl.lib(twitcurl.obj) : error LNK2019: unresolved external symbol __imp__curl_easy_perform referenced in function "public: bool __thiscall twitCurl::oAuthHandlePIN(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?oAuthHandlePIN@twitCurl@@QAE_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
1>twitcurl.lib(twitcurl.obj) : error LNK2019: unresolved external symbol __imp__curl_easy_cleanup referenced in function "public: __thiscall twitCurl::~twitCurl(void)" (??1twitCurl@@QAE@XZ)
1>twitcurl.lib(twitcurl.obj) : error LNK2019: unresolved external symbol __imp__curl_easy_getinfo referenced in function "public: bool __thiscall twitCurl::oAuthHandlePIN(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?oAuthHandlePIN@twitCurl@@QAE_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
1>bin\SocialBuildings_debug.exe : fatal error LNK1120: 7 unresolved externals

这是什么原因?以及如何找到解决方法?

非常感谢您的帮助

最佳答案

所以一些改变解决了我的问题:

1) 在:解决方案属性> C/C++ > 预处理器> 预处理器定义

设置:

_ITERATOR_DEBUG_LEVEL=2

(试图先修改实际的dll,但失败了,损坏的dll)

2) 在:解决方案属性 > C/C++ > 代码生成 > 运行时库

更改为:

多线程动态链接库

我基本上确保这两个字段对于两个构建都是相同的(这就是导致问题的原因)

关于c++ - 将 twitcurl 库从 VS2010 解决方案静态链接到 VS2012 解决方案的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29796880/

相关文章:

c++ - 如何提高 PNG 数据解码时间?

c++ - 来自 QObject::connect 的详细信息

c++ - 函数指针指向静态成员类的错误 C2065

c# - 为什么 NuGet 包管理器从项目文件中删除 SpecificVersion False

c++ - Visual Studio 2012 - 设置 errno 时中断

c++ - 如何使用 Xcode 4.6.2 到 7.1.1 恢复对 Mac OS X 10.6 部署的 c++0x/c++11 支持

c++ - 在 Visual Studio 2012 中编译启用 CLR 的 C++ 项目时出现 C2248 错误

android - 使用 Twitter 原生应用 Android 的 Twitter 身份验证

iphone - ShareKit twitter 和 UIWebView 的问题(无键盘)

推特关注链接