Why clang++37 behaves differently on 9.3 and 10.3?
Matthias Andree
matthias.andree at gmx.de
Wed May 18 07:31:23 UTC 2016
Am 12.05.2016 um 19:59 schrieb Dimitry Andric:
> On 12 May 2016, at 13:33, Yuri wrote:
>>
>> clang++37 compiles this simple program fine on 10.3, but fails on 9.3.
>>
>> Why does it behave differently on different OS versions?
>>
>> It looks like it ignores -std=c++11 on 9.3.
>
> You cannot compile for C++11 on a 9.x installation, because clang will
> use libstdc++ by default there, and the version of libstdc++ in the
> 9.x base system is not C++11 compatible.
>
> To be able to use C++11, you must install libc++ first, using for
> example:
[...]
> On FreeBSD 10.x, clang and libc++ are the defaults, and C++11 can be
> used out of the box.
[...]
(Not meaning to pollute bugzilla yet, hence by mail -- feel free to
upload whichever portions of this to the PR that you feel like, unless
you contort the context. Everyone be aware of Jan's CPPFLAGS hints in
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=209467#c5 that
rawtherapee does not currently set explicitly.)
I was wondering... for the rawtherapee build in the ports framework I'm
doing this (shown below), namely, force the port to use *libc++ with
GCC* (I need(ed) to force GCC because clang used to lack OpenMP support,
and I needed to match the C++ standard library to what the base system
provides by default, that's why it is under the COMPILER_FEATURES check).
I think the original idea was from Baptiste Daroussin.
I was wondering if it would work for Yuri as well on 9.3 (where
graphics/rawtherapee would not normally use it because libc++ isn't part
of COMPILER_FEATURES there). The key will certainly be -nostdinc++ to
get GNU libstdc++ out of the way and the flags to pull the ports libc++ in.
The additional difficulty will be that the third-party requisite C++
libraries, if any, would likely have to be recompiled the same way.
Mixing and matching GNU libstdc++ and libc++ in the same executable
won't work (because these two libraries only agree on the API more or
less, but neither the ABI nor the internal structure layouts).
<https://svnweb.freebsd.org/ports/head/graphics/rawtherapee/Makefile?view=markup&pathrev=395090#l62>
62 .if ${COMPILER_FEATURES:Mlibc++}
63 LDFLAGS+= -L/usr/local/lib/c++
64 CXXFLAGS+= -nostdinc++ -isystem /usr/local/include/c++/v1
65 CFLAGS+= -isystem /usr/local/include/c++/v1
66 BUILD_DEPENDS+=
${LOCALBASE}/lib/c++/libstdc++.so:${PORTSDIR}/devel/libc++
67 .endif
More information about the freebsd-ports
mailing list