I've got a problem here : I have a C++ Library ("DataTsBroad") and a C++ Test app ("DataTsBroadTest"), to test it.
Actually, the Lib and the Test app are both compiled an a Debian Lenny.

Now, i want to continue to compile my Test app on a Debian Lenny (customer constraint), but i would compile my lib on a Squeeze or a Wheezy to work on the last Debian releases.

So, i successfully compiled my Lib on a Squeeze, But, after, when i try to compile my Test app with this Lib on the Lenny, it fails ! There is a Link Error :

Linking CXX executable DataTsBroadTest /home/nis/pezierg/test/ProductMak/Export/DataTsBroad/L64/Release/libDataTsBroad64.so: undefined reference to `std::ctype::_M_widen_init() const@GLIBCXX_3.4.11'
collect2: ld returned 1 exit status
make[2]: *** [DataTsBroadTest] Error 1
make[1]: *** [CMakeFiles/DataTsBroadTest.dir/all] Error 2
make: *** [all] Error 2

The problem is certainly due to ostream C++ Lib, I tried to comment all it's uses in my Lib and it works.

But how can i really fix the problem ?

closed as off-topic by Sven, Nathan C, Michael Hampton Nov 8 '13 at 16:08

  • This question does not appear to be about server, networking, or related infrastructure administration within the scope defined in the help center.
If this question can be reworded to fit the rules in the help center, please edit the question.


I think the problem might be differing versions of gcc/g++ on Lenny and Squeeze. Try to make them equal, either upgrade one or downgrade the other, and then try again.

  • In Fact, g++ version is the problem, i can't downgrade it because i want to use the lastest version ! What can i change in the code to fix it ? – PEZ Nov 8 '13 at 10:38
  • I think possibly you could avoid the problem by not using any C++ libraries, but only C libraries, because they change less often for basic functions like input/output streams. So instead of using an ostream, just #include <stdio.h> and use printf(). I'm aware of the fact that this is not optimal, but I think otherwise you'll have to change the g++ versions. – replay Nov 8 '13 at 10:43
  • btw. changing the g++ versions doesn't necessarily mean that you need root on the system (in case that's the problem), you can also compile an alternate version of g++ as user and use it, without modifying the system's g++. – replay Nov 8 '13 at 10:45
  • For G++, i'm really forced to use existing versions. OK for stdio.h, but if i do that, i have to rewrite a really huge part of my code ! The management of Types is really convenient in C++. If i have to use printf (or fprintf to replace ofstream) i must be careful about all the %d, %c etc... and i will have to totally write new classes to do this. It's really the only one solution ? – PEZ Nov 8 '13 at 11:05
  • @PEZ Otherwise, compile your own g++ that matches the "older" server and use that to compile your app. The issue is an incompatibility of versions. – Nathan C Nov 8 '13 at 12:15

Not the answer you're looking for? Browse other questions tagged or ask your own question.