[MacPorts] #56013: source-highlight @3.1.8_3: crashes (and fails to build) on 10.6

MacPorts noreply at macports.org
Mon Mar 19 00:57:46 UTC 2018


#56013: source-highlight @3.1.8_3: crashes (and fails to build) on 10.6
-------------------------------+--------------------------------------
  Reporter:  Ionic             |      Owner:  Mihai Moldovan <ionic@…>
      Type:  defect            |     Status:  closed
  Priority:  Normal            |  Milestone:
 Component:  ports             |    Version:
Resolution:  fixed             |   Keywords:
      Port:  source-highlight  |
-------------------------------+--------------------------------------

Comment (by Ionic):

 Replying to [comment:7 ryandesign]:
 > Replying to [comment:2 Ionic]:
 > > Recompiling with `cxx11 1.1` and adding `-stdlib=c++11` causes other
 corruption:
 >
 > `-stdlib=c++11` is not a valid flag. Perhaps you meant `-std=c++11`
 and/or `-stdlib=libc++`.

 Sorry, of course I meant `stdlib=libc++`.

 [[br]]
 > Replying to [comment:3 Ionic]:
 > > Switching to a `libc++`-based installation as described in
 [[LibcxxOnOlderSystems]] fixes this bug, which is not very surprising.
 >
 > That does surprise me. That should not have worked, since that works by
 passing the `-stdlib=libc++` flag every time C++ files are compiled or
 linked. Since that flag was missing when linking, linking should have
 failed. And it should have succeeded when ''not'' using
 LibcxxOnOlderSystems.

 As far as I've seen, source-highlight's dylib was linked against the
 system `libstdc++`. That's also visible in the crash report. I think the
 problem here is that the binary and library are built and linked against a
 different stdlib instead of the one found in library dependents (like the
 boost-regex library). Since two different C++ standard libraries are
 linked in this case, a lot of stuff breaks. If we build programs like
 `source-highlight` in C++11 mode and against the same stdlib as boost,
 such mismatched should not happen.

 [[br]]
 > > Given that boost seems to be linking against the system `libstdc++`,
 which doesn't support C++11, we could potentially fix this issue by having
 boost link against `macports-libstdc++`, which does support C++11, if the
 `libc++` is set to `libstdc++`. Comments?
 >
 > Since #55926 was fixed, on older systems, boost does ''not'' use the
 system libstdc++, which doesn't support C++11. It uses the MacPorts
 libstdc++, which does support C++11.

 That's correct, not sure where I got that idea from. It was linking
 against a libstdc++ version, but it was not the system one, but (the
 correct) MacPorts version.

 [[br]]
 > Replying to [comment:4 kencu]:
 > > Perhaps this is a `wontfix`?
 >
 > No, we should fix such problems by passing the `-stdlib=` flag where
 needed. This will continue to be necessary after we make libc++ the
 default cxx_stdlib, unless we change the clang compiler's default stdlib.
 I know you've advocated for that elsewhere so we don't need to discuss it
 again in this ticket.

 If doing the migration correctly by changing `cxx_stdlib` and forcing all
 usage of C++ code to be linked against this, such problems shouldn't come
 up any longer (unless we start mixing up `libc++` and `libstdc++`, but I
 hope there's no reason for this to happen).

 [[br]]
 > Using the cxx11 1.1 portgroup should not be necessary. The whole point
 of #55926 was to make C++11 features ''available'' to ports that use
 boost, but not to ''require'' ports that use boost to use C++11. If that
 didn't work for source-highlight -- if source-highlight doesn't build on
 older systems anymore unless C++11 is used now -- then we might need to
 reevaluate what we did in the boost port for #55926.

 It definitely didn't work. `source-highlight` was both linking against the
 system `libstdc++` and pulling in `libboost-regex-mt.dylib`, which linked
 against a different C++ stdlib. That lead to everything crashing. Only
 force-enabling C++11 mode and changing the stdlib at compile/link time
 directly to the one `boost` was built against fixed this issue.

 I do not see a way to fix such library mix up issues just by having boost
 build against a different stdlib. Other programs will always be linked
 against the default stdlib (if not specified otherwise) by the compiler.
 The only way this could *possibly* work is by using `-nostdlib` which
 avoids pulling in an stdlib - and hope that library dependencies will pull
 in a suitable stdlib. I don't know if programs and libraries will
 successfully link at build time with `-nostdlib`, though.

--
Ticket URL: <https://trac.macports.org/ticket/56013#comment:8>
MacPorts <https://www.macports.org/>
Ports system for macOS


More information about the macports-tickets mailing list