[Bug other/89856] `ld: warning: direct access to global weak symbol means the weak symbol cannot be overridden at runtime` using LTO with optimization and -fprofile-generate
zerolo at gmail dot com
gcc-bugzilla@gcc.gnu.org
Thu Aug 15 11:50:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89856
--- Comment #2 from Daniel Vollmer <zerolo at gmail dot com> ---
I'm seeing the same warning in a similar context when using the
address-sanitizer, e.g.
> cat lib.cpp
#include <string>
#include <iostream>
inline const std::string &func1()
{
static const std::string str = "abc";
return str;
}
void func2()
{
const auto str = func1();
std::cout << str << std::endl;
}
> g++-7 -fsanitize=address -std=c++14 -shared lib.cpp -o lib.dylib
ld: warning: direct access in function '__GLOBAL__sub_D_00099_0_lib.cpp' from
file '/var/folders/02/yl3m8d4d0397mk6dxn6dpcqw0000gp/T//ccEl2k3C.o' to global
weak symbol 'guard variable for func1[abi:cxx11]()::str' from file
'/var/folders/02/yl3m8d4d0397mk6dxn6dpcqw0000gp/T//ccEl2k3C.o' means the weak
symbol cannot be overridden at runtime. This was likely caused by different
translation units being compiled with different visibility settings.
ld: warning: direct access in function '__GLOBAL__sub_I_00099_1_lib.cpp' from
file '/var/folders/02/yl3m8d4d0397mk6dxn6dpcqw0000gp/T//ccEl2k3C.o' to global
weak symbol 'guard variable for func1[abi:cxx11]()::str' from file
'/var/folders/02/yl3m8d4d0397mk6dxn6dpcqw0000gp/T//ccEl2k3C.o' means the weak
symbol cannot be overridden at runtime. This was likely caused by different
translation units being compiled with different visibility settings.
(Same with g++-9.1)
More information about the Gcc-bugs
mailing list