私はOpenMPを使いたいと思う現在のMacベースの趣味プロジェクトに取り組んでいます。私の場合は実装が比較的簡単です。いくつかのオンライン読書の後、gccとclangの両方が現在のバージョンで-fopenmpでコンパイルできることが分かりました。 Xcodeに含まれているデフォルトのmacOSコンパイラは、この機能を削除しています。だから、私はgcc 7とclang 5の両方を私のmacOSにインストールしました。私のプロジェクトはCMakeを介してビルドされているので、私は次のmakefileを書いています。このバージョンでMacOS上のデフォルト以外のコンパイラ(GCCまたはVanilla-Clang)High Sierraリンクの問題
cmake_minimum_required(VERSION 3.0)
project(Project C CXX)
#SET(CMAKE_C_COMPILER /usr/local/bin/gcc-7)
#SET(CMAKE_CXX_COMPILER /usr/local/bin/gcc-7)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O2 -mavx2 -march=haswell -flto=thin -g0")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lpthread")
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
FIND_PACKAGE(Boost 1.65 COMPONENTS filesystem system thread atomic chrono regex)
FIND_PACKAGE(OpenCV REQUIRED core imgproc imgcodecs calib3d)
set(HDF5_USE_STATIC_LIBRARIES ON)
set(HDF5_ROOT /usr/local/HDF_GROUP/HDF5/1.10.0/)
FIND_PACKAGE(HDF5 REQUIRED)
include_directories(${CMAKE_SOURCE_DIR}/include ${Boost_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS} ${HDF5_INCLUDE_DIRS})
add_executable(Project /path/to/many/files..)
TARGET_LINK_LIBRARIES(Project ${Boost_LIBRARIES})
TARGET_LINK_LIBRARIES(Project ${OpenCV_LIBS})
TARGET_LINK_LIBRARIES(Project ${HDF5_LIBRARIES})
CMAKE_CXX_COMPILERが無効に設定すると、コードは、リンクをコンパイルし、滞りなく実行されます。まったく同じ変更をせずにgccやvanilla-clangを使用するようにCMakeを設定すると、コンパイルは問題なく終了しますが、リンクは失敗します。したがって
"std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)", referenced from:
_main in main.cpp.o
のようないくつかのOpenCVのシンボルに、ほとんどのlibC++のものに至るまで行方不明のシンボルのリンカ・レポートの数百人は、私は明らかに根本的な何かが欠けています。 vanilla-clangを使って、-L/usr/local/opt/llvm/libを追加して、clangに付属のlibsにリンカーを向けるようにしました。残念ながら、これは何も変わりませんでした。
私はこの問題について何かヒントをいただきたいと思います。
ヒントをお寄せいただきありがとうございます。これは間違いなくシンボルの数を減らします。興味深いことに、欠けているシンボルは、 "std :: __ 1 :: basic_string、std :: __ 1 :: allocator :: :: basic_string()"のような基本的なC++機能を参照しています。そういうわけではありませんが、それは常にブーストかOpenCVを参照しています。両方のlibをgccで再コンパイルする必要がありますか? –
GruenSein
アップデート:これはLLVM/clang 5.0で機能しました。 GCCは、以前はAppleの仲間によって編集された図書館とまだ戦っているようだ。とにかく、これは大いに役立ちます! – GruenSein