rorth wrote:
> If you dump the symbols from the STL shared library on the system, is there
> one for `time_put` at all? If so, what is the mangled symbol it exports?
While the source requires
```
_ZNKSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecPKSt2tmPKcSB_
std::time_put<char, std::ostreambuf_iterator<char, std::char_traits<char> >
>::put(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&,
char, std::tm const*, char const*, char const*) const
```
`libstdc++.so.6` only provides
```
_ZNKSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecPK2tmPKcSB_
std::time_put<char, std::ostreambuf_iterator<char, std::char_traits<char> >
>::put(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&,
char, tm const*, char const*, char const*) const
```
i.e. `tm const *` instead of `std::tm const *`.
>
> (As a perhaps terrible idea, could we use the `alias` attribute on a
> redeclaration to try to force to link against the correct mangling for
> Solaris only?)
A hack along the lines of
```
asm("_ZNKSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecPKSt2tmPKcSB_
=
_ZNKSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecPK2tmPKcSB_");
```
at least allows `clang` to link.
https://github.com/llvm/llvm-project/pull/99075
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits