作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编译一些使用了 push_back 函数的 C++ 程序。最后我收到这个错误:
/usr/include/c++/4.4/bits/stl_vector.h:741: undefined reference to `std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::**_M_insert_aux**(__gnu_cxx::__normal_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
在文件 STL_vector.h 中你会找到 _M_insert_aux 但我找不到它的定义。
请给我建议如何克服这个问题。
代码片段:
for (table=lex->query_tables; table; table=table->next_global)
{
string table_db=table->db;
table_db += ":";
table_db= table_db+table->table_name;
current.tables.push_back(table_db);
DBUG_PRINT("Dip", (" %s: %s, %s",table->db, table->table_name, table->alias));
}
最佳答案
我用以下 (main.cpp
) 重现了这个编译器错误:
#include <vector>
#include <string>
int main()
{
std::vector<std::string> v;
v.push_back(std::string("test"));
return 0;
}
编译命令:
g++ -fno-implicit-templates main.cpp -o main
如果未指定 -fno-implicit-templates
选项,它会编译。
检查是否指定了编译器标志 -fno-implicit-templates
并在可能的情况下将其删除。
为了使用 -fno-implicit-templates
进行构建,我将源代码更改为:
#include <vector>
#include <string>
//class template std::vector<std::string>; TYPO here: 'class' & 'template' wrong order
template class std::vector<std::string>;
int main()
{
std::vector<std::string> v;
v.push_back(std::string("test"));
return 0;
}
编辑:
我下载了 mysql 5.1.60 并使用您在评论中提供的 configure
和 make
命令成功构建了它。
然后我按如下方式编辑文件“sql_parse.cc”:
// Added these include directives before any other.
#include <vector>
#include <string>
// At the end of include directives added this explicit template
// instantiation.
template class std::vector<std::string>;
// Added the following lines into a random function.
std::vector<std::string> v;
v.push_back(std::string("1"));
然后我再次运行 make
并成功编译和链接。请注意,我使用 -fno-implicit-templates
进行了编译:除了对“sql_parse.cc”所做的更改之外,我没有对 mysql 发行版进行任何其他更改。
关于c++ - 如何克服 "undefined reference to _M_insert_aux()"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8666424/
我正在编译一些使用了 push_back 函数的 C++ 程序。最后我收到这个错误: /usr/include/c++/4.4/bits/stl_vector.h:741: undefined ref
我是一名优秀的程序员,十分优秀!