2014-07-06 37 views
0

我的情況與this thread中討論的內容非常相似。我想這樣做的原因是我在CUDA 6.0中使用OpenCV,但CUDA目前與libstdC++鏈接。我遵循的答案是建議將國旗-stdlib=libstdc++以及我們設置CXXCXXFLAGS的其他方法,但因爲它正在評論:Macports似乎沒有確認這些標誌,並且仍然使用libC++而不是預期的libstdC++構建。OSX 10.9上的Macports - 使用libstdC++編譯opencv

我想對該主題發表評論以要求進行後續追蹤,但不幸的是我的名聲尚未足夠。

有誰知道如何讓Macports安裝OpenCV libstdC++?

編輯1:我還沒有回去檢查下面提供的答案是否有效。用libstdC++編譯OpenCV會導致一些其他非CUDA項目的問題,這些項目主要使用libC++,因此我不太可能會嘗試。但是,如果有人可以嘗試下面的答案,並且如果它有效,我會給予評論。

編輯2:這個問題不再適用於我的情況,因爲CUDA 7.0 RC默認支持libC++。我依然會接受每1編輯

+0

重新考慮我給出的答案,可能需要使用gcc-4.8.2端口,並將'gcc -std = c99'和/或'g ++ -std = C++ 11'作爲'CC' ,'CXX'變量。您還需要確保使用libstdC++構建任何依賴關係。 'port rdeps OpenCV'列出了很多包,有些包含C++組件。 –

回答

1

在提升的情況下一個答案,我能夠迫使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

MacPorts在這裏開發 - 如果有的話,這是正確的答案。請注意,你不需要強制使用MacPorts GCC,設置'configure.cxx_stdlib'就足夠了。請注意,這樣做可能會破壞相關軟件包,但您可能已經意識到了這一點。 – neverpanic

+0

我不同意。原始報告指出「CUDA目前與libstdC++鏈接」... *哪些* libstdC++是鏈接的?如果它與主機libstdC++鏈接,則不應鏈接主機libstdC++和MacPorts libstdC++,並期望在CUDA和OpenCV之間傳遞對象。 –

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及其後續版本中的使用。