我在sql_parse.cc
的源文件MySql 5.5.7rc
中编写了一些代码。在那里我使用了vector
,allocator
等,但编译器没有与标准模板库(STL)链接。任何人都可以建议我该怎么做?
这是错误消息:
libsql.a(sql_parse.cc.o): In function `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> > > >::push_back(std::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&)':
sql_parse.cc:(.text._ZNSt6vectorISsSaISsEE9push_backERKSs[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> > > >::push_back(std::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&)]+0x74): 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&)'
collect2: ld returned 1 exit status
答案 0 :(得分:17)
你应该给出命令行。我怀疑您使用gcc
进行关联,在这种情况下,您应该使用g++
或添加-lstdc++
选项。
答案 1 :(得分:0)
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&)'
该符号是std::vector<std::string>
的成员函数,是一个函数模板,因此应该在程序中实例化,而不是在C ++标准库中实例化。
您是否正在使用-fno-implicit-templates
选项进行编译?或者在代码中使用显式实例化声明(即extern
模板)而不提供定义?那些会阻止编译器实例化模板。
如果您告诉编译器不提供隐式实例化,那么您需要为每个未定义的引用添加显式实例化:
template void std::vector<std::string>::_M_insert_aux(std::vector<std::string>::iterator, std::string const&);
答案 2 :(得分:0)
我使用以下
编译了我的stl代码g++ -std=c++11 file.cpp -o prog
答案 3 :(得分:-3)
#ifndef GLOBAL_H
#define GLOBAL_H
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
#endif //GLOBAL_H
是一个好的开始