#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 fit? > > 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: https://github.com/gcc-mirror/gcc/blob/gcc- 6_4_0-release/libstdc%2B%2B-v3/config/abi/pre/gnu.ver#L1869 It seems that `std::uncaught_exception()` is one of them. So we could use the example code from this page: https://en.cppreference.com/w/cpp/error/uncaught_exception {{{ #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
_______________________________________________ tor-bugs mailing list tor-bugs@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-bugs