Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

external/x64: "make build_env=external" fails #619

Closed
nyh opened this issue Apr 19, 2015 · 3 comments
Closed

external/x64: "make build_env=external" fails #619

nyh opened this issue Apr 19, 2015 · 3 comments

Comments

@nyh
Copy link
Contributor

nyh commented Apr 19, 2015

We've upgraded the boost libraries to a version from Fedora 21, compiled with gcc 4.9. However, our external/../libstdc++.a is from gcc 4.8.2. These two cannot work together, currently make build_env=external fails with:

  LINK loader.elf
build/release.x64/core/mempool.o: In function `memory::mark_smp_allocator_intialized::mark_smp_allocator_intialized()':
/home/nyh/osv.tmp1/core/mempool.cc:365: undefined reference to `__cxa_throw_bad_array_new_length'
external/x64/misc.bin/usr/lib64//libboost_program_options.a(cmdline.o): In function `boost::program_options::detail::cmdline::parse_long_option(std::vector<std::string, std::allocator<std::string> >&)':
(.text+0x1c8a): undefined reference to `std::__throw_out_of_range_fmt(char const*, ...)'
...

These functions, like __throw_out_of_range_fmt, are new to gcc 4.9 and it expects them to exist in the C++ standard library, but because we have in external/ a libstdc++.a from gcc 4.8, it is missing this function.

So we need to upgrade external/libstdc++.a to one from gcc 4.9 too.

@nyh
Copy link
Contributor Author

nyh commented Oct 22, 2015

When the host compiler is gcc 5.1, "make build_env=external" now fails on the bug described in issue #632: the old Boost header files in external/ cannot compile on the newer compiler because of a problem in boost::addressof().

The obvious solution is not to use "make lib_env=external" at all - and even remove this option from our Makefile... But there is one seriosu flaw in this solution: Cross-compiling with "make arch=aarch64" requires this external... On Fedora (for example), we have a cross-compiler for aarch64, but the various libraries (Boost libraries, and even libstdc++) are not available. So we use lib_env=external when cross compiling.

@wkozaczuk
Copy link
Collaborator

@nyh,

Similarly as with #687, shall we close this one?

@wkozaczuk
Copy link
Collaborator

@nyh Closing for the reasons explained in #687 . I hope you agree this can be closed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants