在Visual studio 2013上编译QT4.8.6
出现如下错误:
.\wtf/MathExtras.h(117) : error C2491: “round”: 不允许 dllimport 函数 的定义
.\wtf/MathExtras.h(124) : error C2491: “roundf”: 不允许 dllimport 函数 的定义
.\wtf/MathExtras.h(146) : error C2084: 函数“bool signbit(double)”已有主体
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\math.h(32
4) : 参见“signbit”的前一个定义
d:\repos\libpacks\src\3rdparty\qt-everywhere-opensource-src-4.8.6\src\3rdparty\w
ebkit\source\javascriptcore\runtime\JSValueInlineMethods.h(168) : error C2264:
“signbit”: 函数定义或声明中有错误;未调用函数
dtoa.cpp
.\wtf/MathExtras.h(117) : error C2491: “round”: 不允许 dllimport 函数 的定义
.\wtf/MathExtras.h(124) : error C2491: “roundf”: 不允许 dllimport 函数 的定义
.\wtf/MathExtras.h(146) : error C2084: 函数“bool signbit(double)”已有主体
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\math.h(32
4) : 参见“signbit”的前一个定义
DecimalNumber.cpp
.\wtf/MathExtras.h(117) : error C2491: “round”: 不允许 dllimport 函数 的定义
.\wtf/MathExtras.h(124) : error C2491: “roundf”: 不允许 dllimport 函数 的定义
.\wtf/MathExtras.h(146) : error C2084: 函数“bool signbit(double)”已有主体
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\math.h(32
4) : 参见“signbit”的前一个定义
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
错误代码位置在~\qt-everywhere-opensource-src-4.8.6\src\3rdparty\webkit\Source\JavaScriptCore\wtf\MathExtras.h
line 113 :修改成
#if (COMPILER(MSVC) && _MSC_VER < 1800) || (COMPILER(RVCT) && !(RVCT_VERSION_AT_LEAST(3, 0, 0, 0)))
line 147 :修改成
#if COMPILER(MSVC) && _MSC_VER < 1800
inline bool signbit(double num) { return _copysign(1.0, num) < 0; }
#endif
错误2
.\wtf/HashSet.h(180) : error C2664: “std::pair<WTF::HashTableConstIteratorAdapt
er<WTF::HashTable<void *,void *,WTF::IdentityExtractor<void *>,WTF::PtrHash<JSC:
:EncodedJSValue>,WTF::HashTraits<JSC::EncodedJSValue>,WTF::HashTraits<JSC::Encod
edJSValue>>,void *>,bool>::pair(const std::pair<WTF::HashTableConstIteratorAdapt
er<WTF::HashTable<void *,void *,WTF::IdentityExtractor<void *>,WTF::PtrHash<JSC:
:EncodedJSValue>,WTF::HashTraits<JSC::EncodedJSValue>,WTF::HashTraits<JSC::Encod
edJSValue>>,void *>,bool> &)”: 无法将参数 1 从“std::pair<WTF::HashTableIterato
r<Key,Value,Extractor,HashFunctions,Traits,KeyTraits>,bool>”转换为“const std::
pair<WTF::HashTableConstIteratorAdapter<WTF::HashTable<void *,void *,WTF::Identi
tyExtractor<void *>,WTF::PtrHash<JSC::EncodedJSValue>,WTF::HashTraits<JSC::Encod
edJSValue>,WTF::HashTraits<JSC::EncodedJSValue>>,void *>,bool> &”
with
[
Key=void *
, Value=void *
, Extractor=WTF::IdentityExtractor<void *>
, HashFunctions=WTF::PtrHash<JSC::EncodedJSValue>
, Traits=WTF::HashTraits<JSC::EncodedJSValue>
, KeyTraits=WTF::HashTraits<JSC::EncodedJSValue>
]
原因如下: 无法从“std::pair<WTF::HashTableIterator<Key,Value,Extractor,
HashFunctions,Traits,KeyTraits>,bool>”转换为“const std::pair<WTF::HashTableCon
stIteratorAdapter<WTF::HashTable<void *,void *,WTF::IdentityExtractor<void *>,WT
F::PtrHash<JSC::EncodedJSValue>,WTF::HashTraits<JSC::EncodedJSValue>,WTF::HashTr
aits<JSC::EncodedJSValue>>,void *>,bool>”
with
[
Key=void *
, Value=void *
, Extractor=WTF::IdentityExtractor<void *>
, HashFunctions=WTF::PtrHash<JSC::EncodedJSValue>
, Traits=WTF::HashTraits<JSC::EncodedJSValue>
, KeyTraits=WTF::HashTraits<JSC::EncodedJSValue>
]
没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符
.\wtf/HashSet.h(179): 编译类 模板 成员函数“std::pair<WTF::HashTableCons
tIteratorAdapter<WTF::HashTable<void *,void *,WTF::IdentityExtractor<void *>,WTF
::PtrHash<JSC::EncodedJSValue>,WTF::HashTraits<JSC::EncodedJSValue>,WTF::HashTra
its<JSC::EncodedJSValue>>,void *>,bool> WTF::HashSet<void *,WTF::PtrHash<JSC::En
codedJSValue>,WTF::HashTraits<JSC::EncodedJSValue>>::add(void *const &)”时
d:\repos\libpacks\src\3rdparty\qt-everywhere-opensource-src-4.8.6\src\3r
dparty\webkit\source\javascriptcore\heap\MarkStack.h(74): 参见对正在编译的函数
模板 实例化“std::pair<WTF::HashTableConstIteratorAdapter<WTF::HashTable<void *,
void *,WTF::IdentityExtractor<void *>,WTF::PtrHash<JSC::EncodedJSValue>,WTF::Has
hTraits<JSC::EncodedJSValue>,WTF::HashTraits<JSC::EncodedJSValue>>,void *>,bool>
WTF::HashSet<void *,WTF::PtrHash<JSC::EncodedJSValue>,WTF::HashTraits<JSC::Enco
dedJSValue>>::add(void *const &)”的引用
d:\repos\libpacks\src\3rdparty\qt-everywhere-opensource-src-4.8.6\src\3r
dparty\webkit\source\javascriptcore\heap\MarkStack.h(195): 参见对正在编译的类 模
板 实例化“WTF::HashSet<void *,WTF::PtrHash<JSC::EncodedJSValue>,WTF::HashTraits
<JSC::EncodedJSValue>>”的引用
修改的方法
~\qt-everywhere-opensource-src-4.8.6\src\3rdparty\webkit\Source\JavaScriptCore\wtf\HashSet.h
line 180:
将180行所在的函数以及它下面的函数用下面的代码替换:
template<typename T, typename U, typename V>
inline pair<typename HashSet<T, U, V>::iterator, bool> HashSet<T, U, V>::add(const ValueType& value)
{
// return m_impl.add(value);
auto p= m_impl.add(value);
return make_pair(typename HashSet<T,U,V>::const_iterator(p.first), p.second);
}
template<typename Value, typename HashFunctions, typename Traits>
template<typename T, typename HashTranslator>
inline pair<typename HashSet<Value, HashFunctions, Traits>::iterator, bool>
HashSet<Value, HashFunctions, Traits>::add(const T& value)
{
// typedef HashSetTranslatorAdapter<ValueType, ValueTraits, T, HashTranslator> Adapter;
// return m_impl.template addPassingHashCode<T, T, Adapter>(value, value);
typedef HashSetTranslatorAdapter<ValueType, ValueTraits, T, HashTranslator> Adapter;
typedef typename HashSet<Value, HashFunctions, Traits>::iterator iter_type;
auto& temp = m_impl.template addPassingHashCode<T, T, Adapter>(value, value);
return make_pair((iter_type)temp.first, temp.second);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
错误3
platform\DefaultLocalizationStrategy.cpp(327) : error C2001: newline in constant
platform\DefaultLocalizationStrategy.cpp(327) : fatal error C1057: unexpected end of file in macro expansion
这个错误的原因是因为代码里面的非英文的引号造成的。
原始的错误代码位置:
~\qt-everywhere-opensource-src-4.8.6\src\3rdparty\webkit\Source\WebCore\platform\DefaultLocalizationStrategy.cpp
代码如下:
#if USE(CF)
RetainPtr<CFStringRef> selectedCFString(AdoptCF, truncatedStringForLookupMenuItem(selectedString).createCFString());
return formatLocalizedString(WEB_UI_STRING("Look Up “%@”", "Look Up context menu item with selected word"), selectedCFString.get());
#else
return WEB_UI_STRING("Look Up “<selection>”", "Look Up context menu item with selected word").replace("<selection>", truncatedStringForLookupMenuItem(selectedString));
#endif
#endif
<selection> 单词前后的引号。就是它造成编译报错。修改成下面的代码
#if USE(CF)
RetainPtr<CFStringRef> selectedCFString(AdoptCF, truncatedStringForLookupMenuItem(selectedString).createCFString());
return formatLocalizedString(WEB_UI_STRING("Look Up \"%@\"", "Look Up context menu item with selected word"), selectedCFString.get());
#else
return WEB_UI_STRING("Look Up \"<selection>\"", "Look Up context menu item with selected word").replace("<selection>", truncatedStringForLookupMenuItem(selectedString));
#endif
#endif
相关文章
- 如何在没有装visual studio的机器上运行编译后的exe文件?
- 如何在没有装VS(Visual Studio)的机器上编译运行C#程序
- (转)在SQL Server 2016,Visual Studio 2017环境下,连接数据库屡屡失败,在connectionString上出的问题
- 永久在while循环c#,Visual Studio 2013中
- docker4dotnet #3 在macOS上使用Visual Studio Code和Docker开发asp.net core和mysql应用
- 我可以在Visual Studio 2015中打开旧的Visual Studio解决方案(2005,2008,2010,2013)而不升级项目吗?
- Visual Studio团队服务在构建期间编译的脚本较少
- 在Visual Studio / C#中编译时强制使用“this”和“base”
- 如何强制我的项目在Visual Studio 2013中始终以管理员身份运行?
- 在Visual Studio 2013的“新项目”对话框中缺少项目模板