我想验证当前编译器是否可以使用openmp支持构建.该应用程序已经部署在各种各样的unix系统上,其中一些可能有旧版本的OpenMP,我想测试重要的OpenMP功能.所以,我想构建一个包含一些OpenMP调用的测试源文件.
因此,我创建了一个非常简单的测试文件,并尝试使用CMake的try_compile函数.遗憾的是,它似乎没有正确应用-fopenmp链接器标志.有谁知道如何强制链接器标志或查看链接器标志是否被应用于任何地方?
来自CMakeLists.txt
try_compile(
HAVE_OPENMP
${APBS_ROOT}/src/config
${APBS_ROOT}/src/config/omp_test.c
CMAKE_FLAGS "-DCMAKE_C_FLAGS=-fopenmp -DCMAKE_EXE_LINKER_FLAGS=-fopenmp"
OUTPUT_VARIABLE TRY_COMPILE_OUTPUT
)
Run Code Online (Sandbox Code Playgroud)
来自omp_test.c
#include <stdio.h>
#include <omp.h>
int main()
{
int i;
int threadID = 0;
#pragma omp parallel for private(i, threadID)
for(i = 0; i < 16; i++ )
{
threadID = omp_get_thread_num();
#pragma omp critical
{
printf("Thread %d reporting\n", threadID);
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
结果输出是
Change Dir: src/config/CMakeFiles/CMakeTmp
Run Build Command:/usr/bin/make "cmTryCompileExec/fast"
/usr/bin/make -f CMakeFiles/cmTryCompileExec.dir/build.make CMakeFiles/cmTryCompileExec.dir/build
make[1]: Entering directory `src/config/CMakeFiles/CMakeTmp'
/usr/bin/cmake -E cmake_progress_report /data/work/source/apbs/src/config/CMakeFiles/CMakeTmp/CMakeFiles 1
Building …Run Code Online (Sandbox Code Playgroud) 所以当我加载它时,我尝试运行一个名为BTYDplus的包我得到了这个警告
This data.table install has not detected OpenMP support. It will work but slower in single threaded mode.
我可以运行它没有OpenMP的,但它是非常缓慢的,所以我想通过下面这个教程安装的OpenMP
http://thecoatlessprofessor.com/programming/openmp-in-r-on-os-x/
但我在卡住Enabling R to Compile Code with OpenMP on OS X部分明确当我试图跑vim ~/.R/Makevars/.结果是"~/.R/Makevars/" Illegal file name.
关于如何告诉R使用GCC的任何建议?
我有一台 MacBook M1,并在我的机器上安装了一个针对 x86 / Intel 架构编译的库。我有一些使用 OpenMP 的源代码。我想使用 clang 编译器编译我的代码并将我的可执行文件链接到 x86 库。
我可以按照此处的说明,使用与brew一起分发的clang实现来编译没有x86依赖项的源代码。
然而,当我尝试使用-arch x86_64参数进行编译并链接到 x86 库时,我发现 clang 尝试将我的可执行文件链接到为 arm64 架构构建的 OpenMP 库。
是否可以在 MacBook M1 上安装为 x86 架构构建 OpenMP 库的 clang 版本?
以下是我使用当前设置时遇到的错误示例,即使未链接到 x86 库也是如此。
源代码:
#include <omp.h>
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
调用编译器:
/opt/homebrew/opt/llvm/bin/clang++ -arch x86_64 omp_ex.cpp \
-L/opt/homebrew/opt/llvm/lib -Wl,-rpath,/opt/homebrew/opt/llvm/lib \
-I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include
Run Code Online (Sandbox Code Playgroud)
错误信息:
ld: in '/opt/homebrew/opt/llvm/lib/libunwind.dylib', building for macOS-x86_64 but attempting to link with file built for macOS-arm64
clang-12: error: linker command …Run Code Online (Sandbox Code Playgroud) 我按照此处给出的说明尝试在OS 10.12.6中安装openmp https://www.quora.com/How-do-I-Install-OpenMP-on-Mac-10-11-6
但是简单的命令
brew install clang-omp
没有工作,我得到了错误
Error: No available formula with the name "clang-omp".
Run Code Online (Sandbox Code Playgroud)
然后按照此处包含的说明操作
我试着通过这样做重新安装llvm
brew重新安装llvm
安装成功但我没有看到omp的痕迹.如果我尝试使用g ++或gcc编译一个简单的程序,包括<omp.h>并使用-fopenmp标志进行编译,我得到了
clang: error: unsupported option '-fopenmp'
Run Code Online (Sandbox Code Playgroud)
即使我在其他情况下检查过它已经有效(在Mac OS X(sierra)中使用clang启用OpenMP支持).
我也试图在mac端口中寻找openmp,但我还没有找到它.谢谢您的帮助.
我需要在 macOS 11.1 上安装 data.table 1.12.0(特别是)。
\n我收到错误:
\nclang: error: unsupported option \'-fopenmp\'\nmake: *** [assign.o] Error 1\nRun Code Online (Sandbox Code Playgroud)\n我已按照https://github.com/Rdatatable/data.table/wiki/Installation#openmp-enabled-compiler-for-mac中的说明进行操作,但仍然无法使其正常工作。\nR 3.6.1。
\n我还尝试了 R CMD 安装并得到了相同的错误:
\nR CMD install data.table_1.12.0.tar.gz \n* installing to library \xe2\x80\x98/Users/XXX/Library/R/3.6/library\xe2\x80\x99\n* installing *source* package \xe2\x80\x98data.table\xe2\x80\x99 ...\n** package \xe2\x80\x98data.table\xe2\x80\x99 successfully unpacked and MD5 sums checked\n** using staged installation\n** libs\nclang -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -I/usr/local/include -fopenmp -fPIC -Wall -g -O2 -c assign.c -o assign.o\nclang: error: unsupported option \'-fopenmp\'\nmake: *** [assign.o] Error 1\nERROR: compilation failed for package …Run Code Online (Sandbox Code Playgroud)