【问题标题】:Macports on OSX 10.9 - compile with -stdlib=libstdc++OSX 10.9 上的 Macports - 使用 -stdlib=libstdc++ 编译
【发布时间】:2016-04-04 11:14:08
【问题描述】:

在 OSX 10.9 中,clang++ 的默认 -stdlib 选项是 libc++,这就是 Macport 在构建包时使用的。 有没有办法让 Macports 改用libstdc++

特别是我想通过 Macports 构建 OpenCV,所以它使用 libstdc++,但我想我也会遇到需要为其他包这样做

【问题讨论】:

  • 您为什么要这样做?
  • 因为否则我的构建会中断。我的主要编译器是 g++,而且我使用的其他库很可能也依赖于 libstdc++。简而言之,我在 OSX 10.8 上构建了相同的代码,我看到的唯一区别是我的 10.9 机器上的 OpenCV 依赖于 libc++,而 10.8 机器上的 libstdc++。
  • 为什么您的构建会中断?这可能是您的任何代码(libstdc++ 或 libc++)中的问题。
  • 当然可以。这就是我所知道的 - 相同的代码构建在 osx 10.8 上,但在与 10.9 上的未定义符号链接时中断。无法链接的库是 OpenCV,但我知道它存在,lib 路径集等。查看 OpenCV lib 链接到的内容,两台机器之间的唯一区别是 10.8 OpenCV 上链接到 libstdc++ 和 10.9 上链接到 libc++ .此外,未定义的 OpenCV 符号之后的错误都是关于 std::strings 系列的,这是 libstdc++ 和 libc++ 冲突的常见症状。
  • 你当然需要用 libc++ 重新编译 OpenCV。它们不是二进制兼容的......

标签: c++ opencv clang macports


【解决方案1】:

选项很简单:-stdlib=libstdc++

如果您需要更好地控制各种端口的构建过程,您可以随时设置变量,例如:
CXX = "clang -std=c++11 -stdlib=libc++CXXFLAGS = "-Wall -O2 -march=core2" 等。

并从源代码构建<port>

sudo port -s install <port> -universal \
configure.cc="${CC}" configure.cxx="${CXX}" \
configure.cflags="${CFLAGS}" configure.cxxflags="${CXXFLAGS}"

另一种选择是安装gcc48(或以上)端口,并将其用作编译器。不要使用与旧版本 Xcode 一起安装的旧 gcc-4.2.1。太垃圾了。

【讨论】:

  • 奇怪,Macports 接受这些选项,但不尊重它们。我删除了 OpenCV 库,并通过 -stdlib=libstdc++ 的 CXX 标志构建它,并且仍然构建的库链接到 libc++。
【解决方案2】:

实现这一点的一种方法似乎是从源代码构建 opencv,并使用 configure.cxx_stdlib 变量将 libstdc++ 指定为 C++ 运行时。

尝试以下方法:

sudo port install -s opencv configure.cxx_stdlib="libstdc++"

【讨论】:

  • Aaa,抱歉,我换了工作,甚至无法查看您的回答是否解决了问题>
猜你喜欢
  • 2014-08-27
  • 2012-09-14
  • 2013-06-23
  • 1970-01-01
  • 2014-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多