当前的librime是否用了c++11 新特性,vs2010 编译不过

103 views
Skip to first unread message

yy...@hotmail.com

unread,
Feb 13, 2014, 9:18:09 PM2/13/14
to rime-...@googlegroups.com
小的是c++新手,想学习rime,遵照git clone没有成功,手动下载librime yaml-cpp boost_1.47_0等编译,vc2010 sp1下会报错:

librime\include\rime/common.h(36): error C2332: 'class' : missing tag name
librime\include\rime/common.h(36): error C2993: '' : illegal type for non-type template parameter '<unnamed-tag>'
...

貌似是这里用了C++ 11新特性导致的,而vs2010不支持这个特性:
template <class T, class... Args>
inline shared_ptr<T> New(Args&&... args) {
  return std::make_shared<T>(std::forward<Args>(args)...);
}


用2013全部重新编译,yaml-cpp,boost等都ok,编译librime时,有529个warning,22个错误,

......................................
......................................
警告 529 warning LNK4217: 本地定义的符号 ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@J@Z (public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::operator<<(long)) 在函数 __unwindfunclet$??1?$_Task_impl@E@details@Concurrency@@UAE@XZ$0 中导入 D:\py-project\rime\librime\vcbuild\src\user_dict_manager.obj rime

错误 530 error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: class std::locale __thiscall std::basic_ios<char,struct std::char_traits<char> >::imbue(class std::locale const &)" (__imp_?imbue@?$basic_ios@DU?$char_traits@D@std@@@std@@QAE?AVlocale@2@ABV32@@Z),该符号在函数 "public: void __thiscall boost::io::detail::stream_format_state<char,struct std::char_traits<char> >::apply_on(class std::basic_ios<char,struct std::char_traits<char> > &,class std::locale *)const " (?apply_on@?$stream_format_state@DU?$char_traits@D@std@@@detail@io@boost@@QBEXAAV?$basic_ios@DU?$char_traits@D@std@@@std@@PAVlocale@6@@Z) 中被引用 D:\py-project\rime\librime\vcbuild\src\config.obj rime

......................................
......................................

请问究竟应该用那个编译器,代码是否必须git clone才能顺利编译呢?这么多warning,正常么?


弓辰

unread,
Feb 13, 2014, 9:53:56 PM2/13/14
to rime-...@googlegroups.com
http://github.com/lotem/librime 有個分支叫 msvc ,可以用 VS2010 編譯通過。目前 weasel 引用的是這個分支。
develop 分支則需要較多支持C++11特性的編譯器。不過 weasel 和 librime 之間的接口是純C的,可以跨編譯器,所以用 VS2013 編譯出來的 rime.dll 也可以被 WeaselServer.exe 調用。

你貼出的錯誤屬於鏈接錯誤,可能是某個庫用了不同的編譯選項,或鏈接到不同版本的運行時庫。
按照這個步驟來做,編譯選項都會由 vcbuild.bat 指定好,比自己編譯各種依賴省心。


--
 
---
您已訂閱「Google 網上論壇」的「rime-devel」群組,因此我們特別傳送這封郵件通知您。
如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子郵件到 rime-devel+...@googlegroups.com
如需更多選項,請前往:https://groups.google.com/groups/opt_out。

弓辰

unread,
Feb 13, 2014, 9:54:26 PM2/13/14
to rime-...@googlegroups.com
更正:http://github.com/lotem/librime 有個分支叫 msvc10

yy...@hotmail.com

unread,
Feb 14, 2014, 2:10:25 AM2/14/14
to rime-...@googlegroups.com

多谢提醒,vs2010编译通过,MTd MDd搞的头晕眼花

Gmail_jianming

unread,
Feb 15, 2014, 9:54:21 AM2/15/14
to rime-...@googlegroups.com

請問各位:

 

       Ibus-rime如何打开日志开关?

 

发件人: rime-...@googlegroups.com [mailto:rime-...@googlegroups.com] 代表 yy...@hotmail.com
发送时间: Friday, February 14, 2014 3:10 PM
收件人: rime-...@googlegroups.com
主题: [rime-devel] Re: 当前的librime是否用了c++11 新特性,vs2010 编译不过

 

 

多谢提醒,vs2010编译通过,MTd MDd搞的头晕眼花

Reply all
Reply to author
Forward
0 new messages