[tbb-bugs] #25485 [Applications/Tor Browser]: Browser/TorBrowser/Tor/libstdc++.so.6: version `CXXABI_1.3.11' not found (required by /usr/lib/x86_64-linux-gnu/libmirclient.so.9)

Tor Bug Tracker & Wiki blackhole at torproject.org
Wed Aug 1 18:39:43 UTC 2018

#25485: Browser/TorBrowser/Tor/libstdc++.so.6: version `CXXABI_1.3.11' not found
(required by /usr/lib/x86_64-linux-gnu/libmirclient.so.9)
 Reporter:  cypherpunks                     |          Owner:  tbb-team
     Type:  defect                          |         Status:
                                            |  needs_revision
 Priority:  Very High                       |      Milestone:
Component:  Applications/Tor Browser        |        Version:
 Severity:  Normal                          |     Resolution:
 Keywords:  ff60-esr, TorBrowserTeam201808  |  Actual Points:
Parent ID:                                  |         Points:
 Reviewer:                                  |        Sponsor:

Comment (by boklm):

 Replying to [comment:23 boklm]:
 > Replying to [comment:19 sukhbir]:
 > > So the question then is that if it's not `strings`, then what would be
 a good way of finding out the installed version of libstdc++ to compare
 with the bundled version? Would parsing the `readelf` output be a better
 > Maybe we could build a small c++ program linked with our libstdc++ and
 using the latest CXXABI. If running this program from `start-tor-browser`
 fails then we know that we need to add our libstdc++ to `LD_LIBRARY_PATH`.

 To make a small program using `GLIBCXX_3.4.22`, we need to use some
 function that was added with this version. We can find that by looking in
 the file `libstdc++-v3/config/abi/pre/gnu.ver` from gcc sources:

 It seems that `std::uncaught_exception()` is one of them. So we could use
 the example code from this page:

 #include <iostream>
 #include <exception>
 #include <stdexcept>

 struct Foo {
     int count = std::uncaught_exceptions();
     ~Foo() {
         std::cout << (count == std::uncaught_exceptions()
             ? "~Foo() called normally\n"
             : "~Foo() called during stack unwinding\n");
 int main()
     Foo f;
     try {
         Foo f;
         std::cout << "Exception thrown\n";
         throw std::runtime_error("test exception");
     } catch (const std::exception& e) {
         std::cout << "Exception caught: " << e.what() << '\n';

 When I build this program using gcc 6.4.0, and I try to run it using my
 system's `libstdc++.so.6`, it fails with:
 $ ./out/test/a.out
 ./out/test/a.out: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version
 `GLIBCXX_3.4.22' not found (required by ./out/test/a.out)
 ./out/test/a.out: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version
 `GLIBCXX_3.4.21' not found (required by ./out/test/a.out)

 But it works if I add Tor Browser's `libstdc++.so.6` to `LD_LIBRARY_PATH`.

 So we could run this small program from `start-tor-browser` to check if
 the system provides a recent `libstdc++.so.6`, and only if it fails add
 our version to `LD_LIBRARY_PATH`.

Ticket URL: <https://trac.torproject.org/projects/tor/ticket/25485#comment:27>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online

More information about the tbb-bugs mailing list