gpt4 book ai didi

c++ - 在具有动态链接的 Mac OSX 上使用 OpenMP 编译 C++

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:50:10 26 4
gpt4 key购买 nike

总结

如何在 Mac OSX 上以可移植的方式使用 OpenMP 编译 C++ 代码?

有许多来源建议在 OSX 上使用 OpenMP 编译 C++ 的解决方案,例如:

他们中的大多数建议安装更新的 LLVM/Clang(或 GCC)而不是默认的 Clang。在 OSX 10.12.6 (Sierra) 上,使用 LLVM(通过 brew install llvm)对我有用。

但是,生成的二进制文件似乎不可移植。如果可能的话,我想提供一个二进制文件,这样我的用户就不必自己编译了。

这是我尝试过的

运行 otool -L my_binary 产生

/usr/local/opt/llvm/lib/libomp.dylib (compatibility version 5.0.0, current version 5.0.0)
/usr/local/opt/llvm/lib/libc++.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
/usr/lib/libc++abi.dylib (compatibility version 1.0.0, current version 307.2.0)

前两行看起来我无法将二进制文件交给某个用户并期望它能正常工作。用户必须先安装 LLVM。

所以,我发现 install_name_tool 能够改变它。参见 https://blogs.oracle.com/dipol/dynamic-libraries,-rpath,-and-mac-os

于是,我跑了

cp /usr/local/opt/llvm/lib/libomp.dylib .
cp /usr/local/opt/llvm/lib/libc++.1.dylib .

install_name_tool -change /usr/local/opt/llvm/lib/libomp.dylib @executable_path/libomp.dylib my_binary
install_name_tool -change /usr/local/opt/llvm/lib/libc++.1.dylib @executable_path/libc++.1.dylib my_binary

install_name_tool -id "@loader_path/libomp.dylib" libomp.dylib
install_name_tool -id "@loader_path/libc++.1.dylib" libc++.1.dylib

不幸的是,我没有另一台 Mac 来测试它。所以,我什至不知道这是否有效。

问题

这样做正确吗?不知怎的,以这种方式修改这两个库感觉不对……这个问题的“通常”解决方案是什么?

其他小问题:CMake 找不到 OpenMP(使用 find_package),因此我必须对所需标志进行硬编码 (-fopenmp=libomp)。该标志实际上由 CMake 尝试过,但未被识别为有效。知道为什么或如何解决这个问题吗?

最佳答案

是的,如果您想将它们与应用程序捆绑在一起,则有必要更改可执行文件中的 dylib 位置。请注意,您不会“修改这两个库”,而只会修改它们的查找路径在您的可执行文件中

关于第二点(CMake 未找到 OpenMP):这应该使用较新版本的 cmake (>=3.12) 来解决。在我的系统 (OSX 10.13) 上,CMakeLists.txt 中的以下条目可以解决问题:

find_package(OpenMP)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")

if (APPLE)
target_link_libraries(my_target OpenMP::OpenMP_CXX)
else ()
target_link_libraries(my_target)
endif()

关于c++ - 在具有动态链接的 Mac OSX 上使用 OpenMP 编译 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45679330/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com