OSX 10.9上的Macports - 使用libstdc ++编译opencv

时间:2014-07-06 21:09:41

标签: opencv osx-mavericks macports libstdc++ libc++

我的情况与this thread中讨论的情况非常相似。我想这样做的原因是我正在使用OpenCV和CUDA 6.0,但CUDA目前与libstdc ++相关联。我按照建议放置标记-stdlib=libstdc++以及我们设置CXXCXXFLAGS的另一种方法的答案,但正如评论一样:Macports似乎没有承认标志和仍然使用libc ++而不是libstdc ++构建。

我想对该帖子发表评论,要求进行跟进,但遗憾的是我还没有足够的声誉。

有谁知道如何让Macports用libstdc ++安装OpenCV?

已编辑1:我没有回去检查下面提供的答案之一是否有效。使用libstdc ++编译OpenCV会导致其他一些主要使用libc ++的非CUDA项目出现问题,因此我不太可能尝试。但是,如果有人可以在下面尝试答案并对我发表评论,我会接受答案。

已编辑2:此问题不再适用于我的情况,因为CUDA 7.0 RC默认支持libc ++。我仍然会按编辑1接受答案。

2 个答案:

答案 0 :(得分:1)

在boost的情况下,我能够强制MacPorts链接libstdc ++,如下所示:

sudo port -s install boost configure.cxx_stdlib="libstdc++" configure.compiler="macports-gcc-4.7"

就是这样!显然,没有必要自己传递“-stdlib = libstdc ++”。 otool -L显示了我希望看到的内容:

$ otool -L /opt/local/lib/libboost_date_time-mt.dylib
/opt/local/lib/libboost_date_time-mt.dylib:
        /opt/local/lib/libboost_date_time-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
        /opt/local/lib/libgcc/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.18.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
        /opt/local/lib/libgcc/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)

答案 1 :(得分:0)

如果CUDA链接到/usr/lib/libsdtd++.6.dylib,则不能使用其他答案中指示的macports-gcc端口,因为这样做会导致CUDA使用与OpenCV不同的C ++运行时导致问题。

如果您全新安装了MacPorts,可以编辑macports.conf并设置安装以使用libstdc ++而不是libc ++。只需编辑/opt/local/etc/macports.conf即可包含以下行:

  

cxx_stdlib libstdc ++

请注意,这样做意味着您将无法访问需要C ++ 11或更新功能的端口。

另请注意,libstdc ++已弃用,MacPorts不支持官方支持在Mavericks及其后续使用。