On 2011-04-02 23:57, Hiromichi Watari wrote:
> Hi,
> I'm trying to use STL container "map" with MySQL server but I'm getting the following
> link error at the very end.
>
>
> CXXFLAGS="-DUSE_SYS_STL"
>
> table.h has the following
>
> #include<map>
> .
> .
> .
> std::map<int,int> foo;
>
>
> Are there any name conflicts, since table.h is eventually included in just about
> every source ?
> I'm not sure if I can use namespace to work around this problem ?
>
Hi Hiromichi,
the MySQl Server coee is normally compiled with the compiler flags set
so that you need too explicitly instantiate the templates you use.
Instantiate your template with code like
template std::map<int,int>;
at the end ouf your source file.
You can search for "template" in sql/ for similar instantiations.
/ Magnus Blaudd
>
>
>
>
> -----------------------------------------------------------------------------------------------------------------------------------------------------------
> .
> .
> .
> .
> .
> [100%] Building CXX object sql/CMakeFiles/sql.dir/sql_yacc.cc.o
> [100%] Building CXX object sql/CMakeFiles/sql.dir/sql_builtin.cc.o
> Linking CXX static library libsql.a
> [100%] Built target sql
> [100%] Building CXX object sql/CMakeFiles/mysqld.dir/main.cc.o
> Linking CXX executable mysqld
> libsql.a(sql_base.cc.o): In function `std::_Rb_tree<int, std::pair<int const,
> int>, std::_Select1st<std::pair<int const, int> >, std::less<int>,
> std::allocator<std::pair<int const, int> > >::~_Rb_tree()':
>
> sql_base.cc:(.text._ZNSt8_Rb_treeIiSt4pairIKiiESt10_Select1stIS2_ESt4lessIiESaIS2_EED2Ev[_ZNSt8_Rb_treeIiSt4pairIKiiESt10_Select1stIS2_ESt4lessIiESaIS2_EED5Ev]+0x28):
> undefined reference to `std::_Rb_tree<int, std::pair<int const, int>,
> std::_Select1st<std::pair<int const, int> >, std::less<int>,
> std::allocator<std::pair<int const, int> >
> >::_M_erase(std::_Rb_tree_node<std::pair<int const, int> >*)'
> libsql.a(sql_insert.cc.o): In function `std::map<int, int, std::less<int>,
> std::allocator<std::pair<int const, int> > >::operator=(std::map<int,
> int, std::less<int>, std::allocator<std::pair<int const, int> > >
> const&)':
> sql_insert.cc:(.text._ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEEaSERKS6_[std::map<int,
> int, std::less<int>, std::allocator<std::pair<int const, int> >
> >::operator=(std::map<int, int, std::less<int>,
> std::allocator<std::pair<int const, int> > > const&)]+0x20):
> undefined reference to `std::_Rb_tree<int, std::pair<int const, int>,
> std::_Select1st<std::pair<int const, int> >, std::less<int>,
> std::allocator<std::pair<int const, int> >
> >::operator=(std::_Rb_tree<int, std::pair<int const, int>,
> std::_Select1st<std::pair<int const, int> >, std::less<int>,
> std::allocator<std::pair<int const, int> > > const&)'
> collect2: ld returned 1 exit status
> make[2]: *** [sql/mysqld] Error 1
> make[1]: *** [sql/CMakeFiles/mysqld.dir/all] Error 2
> make: *** [all] Error 2
>