想hack下rime的代码,但是遇到编译问题

208 views
Skip to first unread message

spring...@126.com

unread,
Oct 12, 2013, 12:42:27 AM10/12/13
to rime-...@googlegroups.com
用vs2010编译rime-static和rime_console
目前已经编译出librime.lib库(43.6M),但是在编译rime_console(控制台模式)的时候出现如下编译错误:
——————————————————————————
……此处省略很多warning,几乎librime中所有的obj文件都有warning
1>librime.lib(entry_collector.obj) : warning LNK4049: 已导入本地定义的符号 ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IAEXPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z (protected: void __thiscall std::basic_ios<char,struct std::char_traits<char> >::init(class std::basic_streambuf<char,struct std::char_traits<char> > *,bool))
1>librime.lib(table_db.obj) : warning LNK4049: 已导入本地定义的符号 ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IAEXPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z (protected: void __thiscall std::basic_ios<char,struct std::char_traits<char> >::init(class std::basic_streambuf<char,struct std::char_traits<char> > *,bool))
1>librime.lib(user_db.obj) : warning LNK4049: 已导入本地定义的符号 ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IAEXPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z (protected: void __thiscall std::basic_ios<char,struct std::char_traits<char> >::init(class std::basic_streambuf<char,struct std::char_traits<char> > *,bool))
1>librime.lib(reverse_lookup_translator.obj) : warning LNK4049: 已导入本地定义的符号 ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IAEXPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z (protected: void __thiscall std::basic_ios<char,struct std::char_traits<char> >::init(class std::basic_streambuf<char,struct std::char_traits<char> > *,bool))
1>librime.lib(user_dictionary.obj) : warning LNK4049: 已导入本地定义的符号 ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IAEXPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z (protected: void __thiscall std::basic_ios<char,struct std::char_traits<char> >::init(class std::basic_streambuf<char,struct std::char_traits<char> > *,bool))
1>librime.lib(common.obj) : warning LNK4217: 本地定义的符号 ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IAEXPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z (protected: void __thiscall std::basic_ios<char,struct std::char_traits<char> >::init(class std::basic_streambuf<char,struct std::char_traits<char> > *,bool)) 在函数 "public: __thiscall std::basic_istream<char,struct std::char_traits<char> >::basic_istream<char,struct std::char_traits<char> >(class std::basic_streambuf<char,struct std::char_traits<char> > *,bool)" (??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z) 中导入
1>librime.lib(user_dict_manager.obj) : warning LNK4049: 已导入本地定义的符号 ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IAEXPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z (protected: void __thiscall std::basic_ios<char,struct std::char_traits<char> >::init(class std::basic_streambuf<char,struct std::char_traits<char> > *,bool))
1>librime.lib(config.obj) : warning LNK4049: 已导入本地定义的符号 ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IAEXPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z (protected: void __thiscall std::basic_ios<char,struct std::char_traits<char> >::init(class std::basic_streambuf<char,struct std::char_traits<char> > *,bool))
1>librime.lib(dict_compiler.obj) : warning LNK4049: 已导入本地定义的符号 ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IAEXPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z (protected: void __thiscall std::basic_ios<char,struct std::char_traits<char> >::init(class std::basic_streambuf<char,struct std::char_traits<char> > *,bool))
1>librime.lib(config.obj) : warning LNK4217: 本地定义的符号 ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@_N@Z (public: __thiscall std::basic_ostream<char,struct std::char_traits<char> >::basic_ostream<char,struct std::char_traits<char> >(enum std::_Uninitialized,bool)) 在函数 "public: __thiscall std::basic_iostream<char,struct std::char_traits<char> >::basic_iostream<char,struct std::char_traits<char> >(class std::basic_streambuf<char,struct std::char_traits<char> > *)" (??0?$basic_iostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z) 中导入
1>librime.lib(dict_settings.obj) : warning LNK4049: 已导入本地定义的符号 ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@_N@Z (public: __thiscall std::basic_ostream<char,struct std::char_traits<char> >::basic_ostream<char,struct std::char_traits<char> >(enum std::_Uninitialized,bool))
1>librime.lib(config.obj) : warning LNK4217: 本地定义的符号 ??_D?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ (public: void __thiscall std::basic_ostream<char,struct std::char_traits<char> >::`vbase destructor'(void)) 在函数 "private: bool __thiscall boost::detail::lexical_stream_limited_src<char,class std::basic_streambuf<char,struct std::char_traits<char> >,struct std::char_traits<char> >::lcast_put<double>(double const &)" (??$lcast_put@N@?$lexical_stream_limited_src@DV?$basic_streambuf@DU?$char_traits@D@std@@@std@@U?$char_traits@D@2@@detail@boost@@AAE_NABN@Z) 中导入
1>librime.lib(algebra.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::put(char)" (__imp_?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z)
1>rime_console.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::put(char)" (__imp_?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z),该符号在函数 "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::endl(class std::basic_ostream<char,struct std::char_traits<char> > &)" (?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z) 中被引用
1>librime.lib(tsv.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::put(char)" (__imp_?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z)
1>librime.lib(entry_collector.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::put(char)" (__imp_?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z)
1>librime.lib(dict_settings.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::put(char)" (__imp_?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z)
1>librime.lib(algebra.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::operator<<(class std::basic_ostream<char,struct std::char_traits<char> > & (__cdecl*)(class std::basic_ostream<char,struct std::char_traits<char> > &))" (__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z)
1>rime_console.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::operator<<(class std::basic_ostream<char,struct std::char_traits<char> > & (__cdecl*)(class std::basic_ostream<char,struct std::char_traits<char> > &))" (__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z),该符号在函数 "public: void __thiscall RimeConsole::OnCommit(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?OnCommit@RimeConsole@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 中被引用
1>librime.lib(tsv.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::operator<<(class std::basic_ostream<char,struct std::char_traits<char> > & (__cdecl*)(class std::basic_ostream<char,struct std::char_traits<char> > &))" (__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z)
1>librime.lib(entry_collector.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::operator<<(class std::basic_ostream<char,struct std::char_traits<char> > & (__cdecl*)(class std::basic_ostream<char,struct std::char_traits<char> > &))" (__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z)
1>librime.lib(dict_settings.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::operator<<(class std::basic_ostream<char,struct std::char_traits<char> > & (__cdecl*)(class std::basic_ostream<char,struct std::char_traits<char> > &))" (__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z)
1>librime.lib(algebra.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::operator<<(double)" (__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@N@Z)
1>rime_console.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::operator<<(double)" (__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@N@Z),该符号在函数 "public: void __thiscall RimeConsole::PrintComposition(class rime::Context const *)" (?PrintComposition@RimeConsole@@QAEXPBVContext@rime@@@Z) 中被引用
1>librime.lib(config.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::operator<<(double)" (__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@N@Z)
1>librime.lib(user_db.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::operator<<(double)" (__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@N@Z)
1>librime.lib(entry_collector.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::operator<<(double)" (__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@N@Z)
1>librime.lib(key_event.obj) : 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) 中被引用
1>librime.lib(config.obj) : error LNK2001: 无法解析的外部符号 "__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)
1>librime.lib(user_db.obj) : error LNK2001: 无法解析的外部符号 "__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)
1>librime.lib(user_db.obj) : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::operator<<(unsigned __int64)" (__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_K@Z),该符号在函数 "void __cdecl boost::io::detail::put_last<char,struct std::char_traits<char>,unsigned __int64>(class std::basic_ostream<char,struct std::char_traits<char> > &,unsigned __int64 const &)" (??$put_last@DU?$char_traits@D@std@@_K@detail@io@boost@@YAXAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AB_K@Z) 中被引用
1>D:\cpp_work_space\librime\vcbuild\bin\Release\rime_console.exe : fatal error LNK1120: 5 个无法解析的外部命令
————————————————————————————————
说明:
采用的编译流程按照:VCbuild.bat
boost库采用的是1.46.1版
glog采用0.33版编译

怀疑的可能原因:
(1)既然提示basic_ostream无法链接,可能是glog编译的时候有问题(glog用到了ostream等流),我看librime中用到好多写入glog日志的函数,我的glog用的是0.33版(在编译的时候也有warning,但是忽略了)
(2)其它原因

佛振

unread,
Oct 12, 2013, 3:39:14 AM10/12/13
to rime-...@googlegroups.com
https://code.google.com/p/rimeime/wiki/RimeWithWeasel 步驟 5. 下載和編譯除 Boost 庫以外的編譯依賴。
如果做過這一步,則已經編譯好了一份 glog 0.3.2 (源碼位於 librime/thirdparty/src/glog ),無須另行編譯 glog。


spring...@126.com於 2013年10月12日星期六UTC+8下午12時42分27秒寫道:
Reply all
Reply to author
Forward
0 new messages