[tor-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
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
More information about the tor-bugs
mailing list