Subject: [boost] Fw: Mysterious Boost.System-related errors when running Beast tests
From: Peter Dimov (lists_at_[hidden])
Date: 2018-05-05 12:10:23


The story starts with

https://travis-ci.org/vinniefalco/beast/jobs/375049193

which gives the error

dyld: Symbol not found: __ZN5boost6system6detail19system_category_ncxEv
  Referenced from:
/Users/travis/build/vinniefalco/boost-root/bin.v2/libs/beast/test/beast/core/clang-darwin-4.2.1/debug/threadapi-pthread/threading-multi/fat-tests
  Expected in: /usr/local/lib/libboost_system.dylib

boost::system::detail::system_category_ncx is a new function (in develop),
and careful reading of the above reveals that the compiler is trying to link
to a preinstalled libboost_system.dylib, in /usr/local/lib.

Looking at the log, Boost.System is not even being built. This is odd; the
Beast root Jamfile contains

    <library>/boost/system//boost_system

(at https://github.com/boostorg/beast/blob/develop/Jamfile#L78)

but even if it didn't, it also links to Filesystem, which _is_ being built,
and Filesystem also depends on System in its build/Jamfile:

https://github.com/boostorg/filesystem/blob/develop/build/Jamfile.v2#L29

So Boost.System should be built, but it isn't. Its Jamfile hasn't been
touched in 10 years:

https://github.com/boostorg/system/blob/develop/build/Jamfile.v2

In addition, there's not even a `mklink-or-dir boost/system` in the log,
even though the link must be created because the new headers are being used
(this could be a separate issue).

The Linux/g++ job, https://travis-ci.org/vinniefalco/beast/jobs/375049187,
also doesn't seem to build Boost.System, but it works for some reason.

When I try `b2 libs/beast/test` on Windows, with msvc-14.1, Boost.System is
being built, in the very beginning:

...patience...
...patience...
...patience...
...found 6992 targets...
...updating 1090 targets...
link.hardlink ..\..\boost\utility\string_view.hpp
Hardlink created for ..\..\boost\utility\string_view.hpp <<===>>
..\utility\include\boost\utility\string_view.hpp
compile-c-c++
..\..\bin.v2\libs\beast\test\beast\core\type_traits.test\msvc-14.1\debug\threadapi-win32\threading-multi\type_traits.obj
type_traits.cpp
compile-c-c++
..\..\bin.v2\libs\beast\test\beast\core\type_traits.test\msvc-14.1\debug\threadapi-win32\threading-multi\main.obj
main.cpp
compile-c-c++
..\..\bin.v2\libs\system\build\msvc-14.1\debug\threading-multi\error_code.obj
error_code.cpp
msvc.link.dll
..\..\bin.v2\libs\system\build\msvc-14.1\debug\threading-multi\boost_system-vc141-mt-gd-x32-1_66.dll

(The 1.66 version instead of 1.68 was caused by a typo in the superproject
which is now fixed.)

When I try the same on Ubuntu Trusty, the result is the same as on Travis;
no `mklink-or-dir boost/system`, no building of Boost.System, yet everything
compiles and works, and I don't have a preinstalled Boost on my VM.

It makes no sense at all.

Does anyone have any ideas what might be happening here?