我的情况与this thread中讨论的情况非常相似。我想这样做的原因是我正在使用OpenCV和CUDA 6.0,但CUDA目前与libstdc ++相关联。我按照建议放置标记-stdlib=libstdc++
以及我们设置CXX
和CXXFLAGS
的另一种方法的答案,但正如评论一样:Macports似乎没有承认标志和仍然使用libc ++而不是libstdc ++构建。
我想对该帖子发表评论,要求进行跟进,但遗憾的是我还没有足够的声誉。
有谁知道如何让Macports用libstdc ++安装OpenCV?
已编辑1:我没有回去检查下面提供的答案之一是否有效。使用libstdc ++编译OpenCV会导致其他一些主要使用libc ++的非CUDA项目出现问题,因此我不太可能尝试。但是,如果有人可以在下面尝试答案并对我发表评论,我会接受答案。
已编辑2:此问题不再适用于我的情况,因为CUDA 7.0 RC默认支持libc ++。我仍然会按编辑1接受答案。
答案 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及其后续使用。