对‘Glib::XXX’未定义的引用

在编译easystroke的时候出现了很多未定义的引用错误,最终导致编译失败

g++  -o easystroke main.o handler.o composite.o shape.o win.o gesture.o stats.o actiondb.o prefdb.o actions.o prefs.o annotate.o grabber.o water.o fire.o stroke.o cellrenderertextish.o gui.o desktop.o version.o  -lboost_serialization -lX11 -lXext -lXi -lXfixes -lXtst `pkg-config gtkmm-3.0 dbus-glib-1 --libs`
main.o:在函数‘SendText::run()’中:
main.cc:(.text+0x2361):对‘Glib::ustring::begin()’未定义的引用
main.cc:(.text+0x238d):对‘Glib::ustring::end()’未定义的引用
main.cc:(.text+0x239d):对‘Glib::get_unichar_from_std_iterator(__gnu_cxx::__normal_iterator<char const*, std::string>)’未定义的引用
main.cc:(.text+0x23b1):对‘Glib::get_unichar_from_std_iterator(__gnu_cxx::__normal_iterator<char const*, std::string>)’未定义的引用
win.o:在函数‘Stroke::draw(Cairo::RefPtr<Cairo::Surface>, int, int, int, int, double, bool) const’中:
win.cc:(.text+0xc2c):对‘Cairo::Context::get_text_extents(std::string const&, cairo_text_extents_t&) const’未定义的引用
win.cc:(.text+0xcf3):对‘Cairo::Context::show_text(std::string const&)’未定义的引用
win.o:在函数‘Stroke::draw_svg(std::string) const’中:
win.cc:(.text+0x1949):对‘Cairo::SvgSurface::create(std::string, double, double)’未定义的引用
stats.o:在函数‘Stats::on_stroke(boost::shared_ptr<Ranking>)’中:
stats.cc:(.text+0xab9):对‘Glib::ustring::ustring(std::string const&)’未定义的引用
stats.cc:(.text+0xcdd):对‘Glib::ustring::ustring(std::string const&)’未定义的引用
stats.o:在函数‘Stats::on_pdf()’中:
stats.cc:(.text+0x12db):对‘Cairo::PdfSurface::create(std::string, double, double)’未定义的引用
stats.cc:(.text+0x16ed):对‘Cairo::Context::get_text_extents(std::string const&, cairo_text_extents_t&) const’未定义的引用
stats.cc:(.text+0x1776):对‘Cairo::Context::show_text(std::string const&)’未定义的引用
stats.o:在函数‘Ranking::show(boost::shared_ptr<Ranking>)’中:
stats.cc:(.text+0x3051):对‘Glib::ustring::ustring(std::string const&)’未定义的引用
actiondb.o:在函数‘Command::get_label() const’中:
actiondb.cc:(.text._ZNK7Command9get_labelEv[_ZNK7Command9get_labelEv]+0x9):对‘Glib::ustring::ustring(std::string const&)’未定义的引用
actiondb.o:在函数‘boost::archive::detail::common_oarchive<boost::archive::text_oarchive>::vsave(boost::archive::class_name_type const&)’中:
actiondb.cc:(.text._ZN5boost7archive6detail15common_oarchiveINS0_13text_oarchiveEE5vsaveERKNS0_15class_name_typeE[_ZN5boost7archive6detail15common_oarchiveINS0_13text_oarchiveEE5vsaveERKNS0_15class_name_typeE]+0x2b):对‘boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::save(std::string const&)’未定义的引用
actiondb.o:在函数‘Glib::ustring Glib::ustring::format<std::string>(std::string const&)’中:
actiondb.cc:(.text._ZN4Glib7ustring6formatISsEES0_RKT_[_ZN4Glib7ustring6formatISsEES0_RKT_]+0x20):对‘Glib::ustring::ustring(std::string const&)’未定义的引用
actiondb.o:在函数‘boost::archive::detail::oserializer<boost::archive::text_oarchive, Command>::save_object_data(boost::archive::detail::basic_oarchive&, void const*) const’中:
actiondb.cc:(.text._ZNK5boost7archive6detail11oserializerINS0_13text_oarchiveE7CommandE16save_object_dataERNS1_14basic_oarchiveEPKv[_ZNK5boost7archive6detail11oserializerINS0_13text_oarchiveE7CommandE16save_object_dataERNS1_14basic_oarchiveEPKv]+0x5c):对‘boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::save(std::string const&)’未定义的引用
actiondb.o:在函数‘boost::archive::detail::iserializer<boost::archive::text_iarchive, Command>::load_object_data(boost::archive::detail::basic_iarchive&, void*, unsigned int) const’中:
actiondb.cc:(.text._ZNK5boost7archive6detail11iserializerINS0_13text_iarchiveE7CommandE16load_object_dataERNS1_14basic_iarchiveEPvj[_ZNK5boost7archive6detail11iserializerINS0_13text_iarchiveE7CommandE16load_object_dataERNS1_14basic_iarchiveEPvj]+0x4b):对‘boost::archive::text_iarchive_impl<boost::archive::text_iarchive>::load(std::string&)’未定义的引用
actiondb.o:在函数‘boost::archive::detail::iserializer<boost::archive::text_iarchive, SendText>::load_object_data(boost::archive::detail::basic_iarchive&, void*, unsigned int) const’中:
actiondb.cc:(.text._ZNK5boost7archive6detail11iserializerINS0_13text_iarchiveE8SendTextE16load_object_dataERNS1_14basic_iarchiveEPvj[_ZNK5boost7archive6detail11iserializerINS0_13text_iarchiveE8SendTextE16load_object_dataERNS1_14basic_iarchiveEPvj]+0x4f):对‘boost::archive::text_iarchive_impl<boost::archive::text_iarchive>::load(std::string&)’未定义的引用
actiondb.cc:(.text._ZNK5boost7archive6detail11iserializerINS0_13text_iarchiveE8SendTextE16load_object_dataERNS1_14basic_iarchiveEPvj[_ZNK5boost7archive6detail11iserializerINS0_13text_iarchiveE8SendTextE16load_object_dataERNS1_14basic_iarchiveEPvj]+0x5d):对‘Glib::ustring::operator=(std::string const&)’未定义的引用
actiondb.o:在函数‘boost::archive::detail::oserializer<boost::archive::text_oarchive, SendText>::save_object_data(boost::archive::detail::basic_oarchive&, void const*) const’中:
actiondb.cc:(.text._ZNK5boost7archive6detail11oserializerINS0_13text_oarchiveE8SendTextE16save_object_dataERNS1_14basic_oarchiveEPKv[_ZNK5boost7archive6detail11oserializerINS0_13text_oarchiveE8SendTextE16save_object_dataERNS1_14basic_oarchiveEPKv]+0x6d):对‘boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::save(std::string const&)’未定义的引用
actiondb.o:在函数‘boost::archive::detail::iserializer<boost::archive::text_iarchive, ActionListDiff>::load_object_data(boost::archive::detail::basic_iarchive&, void*, unsigned int) const’中:
actiondb.cc:(.text._ZNK5boost7archive6detail11iserializerINS0_13text_iarchiveE14ActionListDiffE16load_object_dataERNS1_14basic_iarchiveEPvj[_ZNK5boost7archive6detail11iserializerINS0_13text_iarchiveE14ActionListDiffE16load_object_dataERNS1_14basic_iarchiveEPvj]+0xb1):对‘boost::archive::text_iarchive_impl<boost::archive::text_iarchive>::load(std::string&)’未定义的引用
actiondb.o:在函数‘void ActionListDiff::serialize<boost::archive::text_oarchive>(boost::archive::text_oarchive&, unsigned int)’中:
actiondb.cc:(.text._ZN14ActionListDiff9serializeIN5boost7archive13text_oarchiveEEEvRT_j[_ZN14ActionListDiff9serializeIN5boost7archive13text_oarchiveEEEvRT_j]+0x9c):对‘boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::save(std::string const&)’未定义的引用
actiondb.o:在函数‘boost::archive::detail::iserializer<boost::archive::text_iarchive, std::pair<std::string const, StrokeInfo> >::load_object_data(boost::archive::detail::basic_iarchive&, void*, unsigned int) const’中:
actiondb.cc:(.text._ZNK5boost7archive6detail11iserializerINS0_13text_iarchiveESt4pairIKSs10StrokeInfoEE16load_object_dataERNS1_14basic_iarchiveEPvj[_ZNK5boost7archive6detail11iserializerINS0_13text_iarchiveESt4pairIKSs10StrokeInfoEE16load_object_dataERNS1_14basic_iarchiveEPvj]+0x34):对‘boost::archive::text_iarchive_impl<boost::archive::text_iarchive>::load(std::string&)’未定义的引用
actiondb.o:在函数‘boost::archive::detail::iserializer<boost::archive::text_iarchive, StrokeInfo>::load_object_data(boost::archive::detail::basic_iarchive&, void*, unsigned int) const’中:
actiondb.cc:(.text._ZNK5boost7archive6detail11iserializerINS0_13text_iarchiveE10StrokeInfoE16load_object_dataERNS1_14basic_iarchiveEPvj[_ZNK5boost7archive6detail11iserializerINS0_13text_iarchiveE10StrokeInfoE16load_object_dataERNS1_14basic_iarchiveEPvj]+0x92):对‘boost::archive::text_iarchive_impl<boost::archive::text_iarchive>::load(std::string&)’未定义的引用
actiondb.o:在函数‘boost::archive::detail::oserializer<boost::archive::text_oarchive, StrokeInfo>::save_object_data(boost::archive::detail::basic_oarchive&, void const*) const’中:
actiondb.cc:(.text._ZNK5boost7archive6detail11oserializerINS0_13text_oarchiveE10StrokeInfoE16save_object_dataERNS1_14basic_oarchiveEPKv[_ZNK5boost7archive6detail11oserializerINS0_13text_oarchiveE10StrokeInfoE16save_object_dataERNS1_14basic_oarchiveEPKv]+0x92):对‘boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::save(std::string const&)’未定义的引用
prefdb.o:在函数‘boost::archive::detail::oserializer<boost::archive::text_oarchive, std::pair<std::string const, TimeoutType> >::save_object_data(boost::archive::detail::basic_oarchive&, void const*) const’中:
prefdb.cc:(.text._ZNK5boost7archive6detail11oserializerINS0_13text_oarchiveESt4pairIKSs11TimeoutTypeEE16save_object_dataERNS1_14basic_oarchiveEPKv[_ZNK5boost7archive6detail11oserializerINS0_13text_oarchiveESt4pairIKSs11TimeoutTypeEE16save_object_dataERNS1_14basic_oarchiveEPKv]+0x59):对‘boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::save(std::string const&)’未定义的引用
prefdb.o:在函数‘boost::archive::detail::oserializer<boost::archive::text_oarchive, std::set<std::string, std::less<std::string>, std::allocator<std::string> > >::save_object_data(boost::archive::detail::basic_oarchive&, void const*) const’中:
prefdb.cc:(.text._ZNK5boost7archive6detail11oserializerINS0_13text_oarchiveESt3setISsSt4lessISsESaISsEEE16save_object_dataERNS1_14basic_oarchiveEPKv[_ZNK5boost7archive6detail11oserializerINS0_13text_oarchiveESt3setISsSt4lessISsESaISsEEE16save_object_dataERNS1_14basic_oarchiveEPKv]+0xde):对‘boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::save(std::string const&)’未定义的引用
prefdb.o:在函数‘boost::archive::detail::iserializer<boost::archive::text_iarchive, std::pair<std::string const, TimeoutType> >::load_object_data(boost::archive::detail::basic_iarchive&, void*, unsigned int) const’中:
prefdb.cc:(.text._ZNK5boost7archive6detail11iserializerINS0_13text_iarchiveESt4pairIKSs11TimeoutTypeEE16load_object_dataERNS1_14basic_iarchiveEPvj[_ZNK5boost7archive6detail11iserializerINS0_13text_iarchiveESt4pairIKSs11TimeoutTypeEE16load_object_dataERNS1_14basic_iarchiveEPvj]+0x46):对‘boost::archive::text_iarchive_impl<boost::archive::text_iarchive>::load(std::string&)’未定义的引用
prefdb.o:在函数‘void boost::serialization::load_set_collection<boost::archive::text_iarchive, std::set<std::string, std::less<std::string>, std::allocator<std::string> > >(boost::archive::text_iarchive&, std::set<std::string, std::less<std::string>, std::allocator<std::string> >&)’中:
prefdb.cc:(.text._ZN5boost13serialization19load_set_collectionINS_7archive13text_iarchiveESt3setISsSt4lessISsESaISsEEEEvRT_RT0_[_ZN5boost13serialization19load_set_collectionINS_7archive13text_iarchiveESt3setISsSt4lessISsESaISsEEEEvRT_RT0_]+0x13c):对‘boost::archive::text_iarchive_impl<boost::archive::text_iarchive>::load(std::string&)’未定义的引用
prefdb.o:在函数‘boost::archive::detail::iserializer<boost::archive::text_iarchive, std::pair<std::string const, boost::shared_ptr<ButtonInfo> > >::load_object_data(boost::archive::detail::basic_iarchive&, void*, unsigned int) const’中:
prefdb.cc:(.text._ZNK5boost7archive6detail11iserializerINS0_13text_iarchiveESt4pairIKSsNS_10shared_ptrI10ButtonInfoEEEE16load_object_dataERNS1_14basic_iarchiveEPvj[_ZNK5boost7archive6detail11iserializerINS0_13text_iarchiveESt4pairIKSsNS_10shared_ptrI10ButtonInfoEEEE16load_object_dataERNS1_14basic_iarchiveEPvj]+0x34):对‘boost::archive::text_iarchive_impl<boost::archive::text_iarchive>::load(std::string&)’未定义的引用
prefdb.o:在函数‘boost::archive::detail::oserializer<boost::archive::text_oarchive, std::pair<std::string const, boost::shared_ptr<ButtonInfo> > >::save_object_data(boost::archive::detail::basic_oarchive&, void const*) const’中:
prefdb.cc:(.text._ZNK5boost7archive6detail11oserializerINS0_13text_oarchiveESt4pairIKSsNS_10shared_ptrI10ButtonInfoEEEE16save_object_dataERNS1_14basic_oarchiveEPKv[_ZNK5boost7archive6detail11oserializerINS0_13text_oarchiveESt4pairIKSsNS_10shared_ptrI10ButtonInfoEEEE16save_object_dataERNS1_14basic_oarchiveEPKv]+0x4b):对‘boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::save(std::string const&)’未定义的引用
actions.o:在函数‘Actions::on_remove_app()’中:
actions.cc:(.text+0x70c):对‘Glib::ustring::ustring(std::string const&)’未定义的引用
actions.o:在函数‘Actions::load_app_list(Gtk::TreeNodeChildren const&, ActionListDiff*)’中:
actions.cc:(.text+0x15d9):对‘Glib::ustring::ustring(std::string const&)’未定义的引用
actions.o:在函数‘Actions::update_row(Gtk::TreeRow const&)’中:
actions.cc:(.text+0x29b9):对‘Glib::ustring::ustring(std::string const&)’未定义的引用
actions.o:在函数‘Actions::on_add_app()’中:
actions.cc:(.text+0xa21a):对‘Glib::ustring::ustring(std::string const&)’未定义的引用
prefs.o:在函数‘Prefs::on_add()’中:
prefs.cc:(.text+0x1c9d):对‘Glib::ustring::ustring(std::string const&)’未定义的引用
prefs.o:prefs.cc:(.text+0x2d37): 跟着更多未定义的参考到 Glib::ustring::ustring(std::string const&)
prefs.o:在函数‘Prefs::on_remove()’中:
prefs.cc:(.text+0x6758):对‘Glib::ustring::ustring(std::string&&)’未定义的引用
prefs.o:在函数‘void Gtk::TreeRow::set_value<std::string>(Gtk::TreeModelColumn<std::string> const&, std::string const&) const’中:
prefs.cc:(.text._ZNK3Gtk7TreeRow9set_valueISsEEvRKNS_15TreeModelColumnIT_EERKS3_[_ZNK3Gtk7TreeRow9set_valueISsEEvRKNS_15TreeModelColumnIT_EERKS3_]+0x2b):对‘Glib::Value<std::string>::set(std::string const&)’未定义的引用
collect2: error: ld returned 1 exit status
Makefile:65: recipe for target 'easystroke' failed
make: *** [easystroke] Error 1

尝试了以下方法:

1.一开始以为是glib的问题,尝试了下面文章中的方法

http://www.hongyanliren.com/2014m06/8405.html

在/usr/include中看到了dbus-1.0和glib-2.0文件夹

以为是dbus-glib-1版本的问题,所以尝试修改

修改成"dbus-glib-2"和"dbus-1 glib-2",都不行,发现变成了别的错误,并且提示在XXX was not found in the pkg-config search path

2.卸载libdbus-glib-1-dev后重装,不行

 

然后查看了一下pkg-config中的确包含dbus-glib-1

参考了https://github.com/Beep6581/RawTherapee/issues/3024,只看懂一点点,大致意思是版本不对,之前也尝试过修改g++版本为7.5.0,原来是4.8.5,但是也没用,最后把gcc和g++都修改成了7.5.0,重新编译,成功了


posted @ 2021-07-09 15:05  夏日已末  阅读(229)  评论(0编辑  收藏  举报