Hi Magnus,
Thank you for your suggestion, I included the following at the end of table.h and I got
similar and more errors.
Looks like I might have to write my own map container (oh nooooooooo !).
Hiromichi
bool is_simple_order(ORDER *order);
/****************************************************************************
Used templates
****************************************************************************/
#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION
template class std::map<int,int>;
#endif
#endif /* MYSQL_CLIENT */
#endif /* TABLE_INCLUDED */
----------------------------------------------------------------
[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(mysqld.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&)':
/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/bits/stl_map.h:253:
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&)'
libsql.a(mysqld.cc.o): In function `std::map<int, int, std::less<int>,
std::allocator<std::pair<int const, int> > >::insert(std::pair<int
const, int> const&)':
/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/bits/stl_map.h:500:
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_insert_unique(std::pair<int const, int> const&)'
libsql.a(mysqld.cc.o): In function `std::map<int, int, std::less<int>,
std::allocator<std::pair<int const, int> >
>::insert(std::_Rb_tree_iterator<std::pair<int const, int> >,
std::pair<int const, int> const&)':
/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/bits/stl_map.h:540:
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_insert_unique_(std::_Rb_tree_const_iterator<std::pair<int const, int>
>, std::pair<int const, int> const&)'
libsql.a(mysqld.cc.o): In function `std::map<int, int, std::less<int>,
std::allocator<std::pair<int const, int> > >::erase(int const&)':
/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/bits/stl_map.h:582:
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> > >::erase(int const&)'
libsql.a(mysqld.cc.o): In function `std::map<int, int, std::less<int>,
std::allocator<std::pair<int const, int> >
>::erase(std::_Rb_tree_iterator<std::pair<int const, int> >,
std::_Rb_tree_iterator<std::pair<int const, int> >)':
/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/bits/stl_map.h:597:
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> >
>::erase(std::_Rb_tree_iterator<std::pair<int const, int> >,
std::_Rb_tree_iterator<std::pair<int const, int> >)'
libsql.a(mysqld.cc.o): In function `std::map<int, int, std::less<int>,
std::allocator<std::pair<int const, int> > >::swap(std::map<int, int,
std::less<int>, std::allocator<std::pair<int const, int> > >&)':
/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/bits/stl_map.h:616:
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> > >::swap(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> > >&)'
libsql.a(mysqld.cc.o): In function `std::map<int, int, std::less<int>,
std::allocator<std::pair<int const, int> > >::find(int const&)':
/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/bits/stl_map.h:659:
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> > >::find(int const&)'
libsql.a(mysqld.cc.o): In function `std::map<int, int, std::less<int>,
std::allocator<std::pair<int const, int> > >::find(int const&) const':
/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/bits/stl_map.h:674:
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> > >::find(int const&) const'
libsql.a(mysqld.cc.o): In function `std::map<int, int, std::less<int>,
std::allocator<std::pair<int const, int> > >::count(int const&)
const':
/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/bits/stl_map.h:686:
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> > >::find(int const&) const'
libsql.a(mysqld.cc.o): In function `std::map<int, int, std::less<int>,
std::allocator<std::pair<int const, int> > >::equal_range(int
const&)':
/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/bits/stl_map.h:755:
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> > >::equal_range(int const&)'
libsql.a(mysqld.cc.o): In function `std::map<int, int, std::less<int>,
std::allocator<std::pair<int const, int> > >::equal_range(int const&)
const':
/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/bits/stl_map.h:774:
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> > >::equal_range(int const&)
const'
libsql.a(mysqld.cc.o): In function `_Rb_tree':
/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/bits/stl_tree.h:602:
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_copy(std::_Rb_tree_node<std::pair<int const, int> > const*,
std::_Rb_tree_node<std::pair<int const, int> >*)'
libsql.a(mysqld.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> > >::clear()':
/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/bits/stl_tree.h:726:
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(mysqld.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> > >::lower_bound(int
const&)':
/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/bits/stl_tree.h:745:
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_lower_bound(std::_Rb_tree_node<std::pair<int const, int> >*,
std::_Rb_tree_node<std::pair<int const, int> >*, int const&)'
libsql.a(mysqld.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> > >::lower_bound(int const&)
const':
/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/bits/stl_tree.h:749:
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_lower_bound(std::_Rb_tree_node<std::pair<int const, int> > const*,
std::_Rb_tree_node<std::pair<int const, int> > const*, int const&) const'
libsql.a(mysqld.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> > >::upper_bound(int
const&)':
/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/bits/stl_tree.h:753:
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_upper_bound(std::_Rb_tree_node<std::pair<int const, int> >*,
std::_Rb_tree_node<std::pair<int const, int> >*, int const&)'
libsql.a(mysqld.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> > >::upper_bound(int const&)
const':
/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/bits/stl_tree.h:757:
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_upper_bound(std::_Rb_tree_node<std::pair<int const, int> > const*,
std::_Rb_tree_node<std::pair<int const, int> > const*, int const&) const'
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> >*)'
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
--- On Sun, 4/3/11, Magnus Blåudd <magnus.blaudd@stripped> wrote:
> From: Magnus Blåudd <magnus.blaudd@stripped>
> Subject: Re: Problem linking STL::map with mysqld
> To: "Hiromichi Watari" <hiromichiwatari@stripped>
> Cc: internals@stripped
> Date: Sunday, April 3, 2011, 1:33 PM
> 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
> >
>
>