Avatar
利用している C++ 製ライブラリ(Eigen)が OMP という並列計算のためのライブラリをサポートしていて,これを有効にしたいと思って色々やっています.こちらにある方法を参考に, OpenMP on High Sierra https://iscinumpy.gitlab.io/post/omp-on-high-sierra/ brew install libomp した上で,Package.swift を次のように書くと: .target( name: "CEigenBridge", path: "Sources/CEigenBridge", cxxSettings: [ .headerSearchPath("../Eigen/"), .unsafeFlags(["-I/usr/local/opt/libomp/include/", "-Xpreprocessor", "-fopenmp"]), ], linkerSettings: [ .unsafeFlags(["-L/usr/local/opt/libomp/lib/"]), .linkedLibrary("omp") ] ), Debug configuration ではビルドできたのですが,Release ビルドだと次のエラーが出て上手くいきません: ld: warning: ignoring file /usr/local/opt/libomp/lib//libomp.dylib, building for macOS-arm64 but attempting to link with file built for macOS-x86_64 Undefined symbols for architecture arm64: "___kmpc_fork_call", referenced from: ... Release ビルドの仕組みがよく分かってないのですが,arm64 用と x86_64 用の両方を作っていて,前者に対して libomp.dylib をリンクしようとしたら x86_64 用のになってるから無視されて,arm64 用のシンボルが見つからなくてエラー,という感じなのでしょうか?(自分の環境は macOS-x86_64 です) 実行環境用にしかビルドしないという風に SwiftPM (または他の方法で)で設定するということはできるのでしょうか? あるいは他の解決法があれば教えて頂けると嬉しいです🙏 (edited)