|
Boost Users : |
Subject: [Boost-users] [system] symbol visibility and GCC vs. Clang
From: James Walker (jamesw_at_[hidden])
Date: 2012-10-22 17:29:34
When trying to link a bunch of libraries on OS X, I got this linker warning:
ld: warning: direct access in
boost::system::system_error::~system_error() to global weak symbol
vtable for boost::system::system_error means the weak symbol cannot be
overridden at runtime. This was likely caused by different translation
units being compiled with different visibility settings.
As far as I can tell, everything is compiled using the flags
-fvisibility=hidden -fvisibility-inlines-hidden.
I'm wondering whether the problem is that some of the libraries were
built using gcc and some were built using Clang. In
boost/system/system_error.hpp, the declaration of
boost::system::system_error is decorated with BOOST_SYMBOL_VISIBLE. In
boost/config/compiler/gcc.hpp, BOOST_SYMBOL_VISIBLE is defined to be
__attribute__((visibility("default"))), whereas
boost/config/compiler/clang.hpp does not define BOOST_SYMBOL_VISIBLE.
-- James W. Walker, Innoventive Software LLC <http://www.frameforge3d.com/>
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net