如何在c ++代码中链接STL?

时间:2011-11-23 13:33:33

标签: c++ stl

我在sql_parse.cc的源文件MySql 5.5.7rc中编写了一些代码。在那里我使用了vectorallocator等,但编译器没有与标准模板库(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

4 个答案:

答案 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

是一个好的开始