期望const std :: string&

时间:2016-01-13 10:46:44

标签: c++ c++11 gcc linker

尝试链接共享库( gtkmm )时,我的签名包含std::string const&的函数会出现链接器错误。

例如,如果函数声明为

void set_icon_from_file(const std::string&);

g ++报告

undefined reference to `Gtk::Window::set_icon_from_file(std::string const&)'

我正在使用来自pkg-config的链接器标志,对于其他函数(例如,将原始类型作为参数的函数)不会发生这种情况,因此我怀疑链接器配置正确。

我的目标文件上的

readelf给了我

45: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND _ZN3Gtk6Window18set_icon_from_fileERKSs

并在共享库

10991: 00000000003c0950    96 FUNC    GLOBAL DEFAULT   11 _ZN3Gtk6Window18set_icon_from_fileERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE

我不知道该怎么做。我检查了函数是在库头文件和源代码中使用相同的签名声明的。由于错误名称中的__cxx11部分,我首先怀疑C ++版本之间的兼容性问题,但是,我也在使用C ++ 11构建。

1 个答案:

答案 0 :(得分:3)

看看我的c ++ - filt输出:

_ZN3Gtk6Window18set_icon_from_fileERKSs
Gtk::Window::set_icon_from_file(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
_ZN3Gtk6Window18set_icon_from_fileERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Gtk::Window::set_icon_from_file(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)

这意味着第二个版本是在启用glibcxx11 abi的情况下编译的。 Here有关它的更多信息。

因此,基本上您需要将gcc更新为5.1版本或降级库。