Hi Dodji,

On 02/04/2013 04:53 PM, Dodji Seketeli wrote:
Hello,

Since commit r195676[1], it looks like
libstdc++-v3/src/c++11/hashtable_c++0x.cc is missing an explicit
instantiation for std::lower_bound.  This leads to libstdc++.so having
the symbol for that (missing) instantiation be undefined, thus
preventing executables from being linked with libstdc++.
Note that I can confirm this only if I build with less optimization than the default -O2, say -O. That may explain why nobody noticed earlier.
The patchlet below seems to fixed the issue for me.

Indeed, I think we want something like that. Thanks. In terms of nits, formatting and types (who knows, maybe on some systems a std::size_t is an unsigned long long), I would write something like the attached. Please double check that it works for you and go ahead.

Thanks again,
Paolo.

//////////////////


Index: hashtable_c++0x.cc
===================================================================
--- hashtable_c++0x.cc  (revision 195759)
+++ hashtable_c++0x.cc  (working copy)
@@ -94,4 +94,11 @@ namespace __detail
 
 _GLIBCXX_END_NAMESPACE_VERSION
 } // namespace __detail
+
+  // Instantiation.
+  template
+  const unsigned long*
+  lower_bound<const unsigned long*, size_t>(const unsigned long*,
+                                           const unsigned long*,
+                                           const size_t&);
 } // namespace std

Reply via email to