Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
macOS llvm编译:ld:找不到-lomp的库_C_Macos_Gcc_G++ - Fatal编程技术网

macOS llvm编译:ld:找不到-lomp的库

macOS llvm编译:ld:找不到-lomp的库,c,macos,gcc,g++,C,Macos,Gcc,G++,我必须使用openMP与我的大学进行一个项目。为此,我使用brew下载了llvm,并将makefile中的cc=gcc替换为cc=/usr/local/opt/llvm/bin/clang 现在它似乎可以正常工作了,但我遇到了一个意外错误,即ld:library-not found for-lomp clang-11:error:linker命令失败,退出代码为1 当我运行llvm config--system libs时,我得到:-lm-lz-lcurses-lxml2 我是这方面的初学者,但

我必须使用openMP与我的大学进行一个项目。为此,我使用brew下载了llvm,并将makefile中的cc=gcc替换为
cc=/usr/local/opt/llvm/bin/clang

现在它似乎可以正常工作了,但我遇到了一个意外错误,即ld:library-not found for-lomp clang-11:error:linker命令失败,退出代码为1

当我运行
llvm config--system libs
时,我得到:
-lm-lz-lcurses-lxml2

我是这方面的初学者,但我想我必须安装ld库? 有人能帮忙吗

编辑:完整的makefile

C=/usr/local/opt/llvm/bin/clang
CFLAGS = -O2 -fopenmp
LDFLAGS = -fopenmp

EXEC =  bubble.run  \
    mergesort.run   \
    odd-even.run

HEADER_FILES = $(wildcard *.h)

RAND_INIT=0

ifeq ($(RAND_INIT), 1)
$(Initialization of the vector is random)
CONFIG_FLAGS += -DRINIT
endif

all: $(EXEC)

%.run: %.o utils.o
    $(CC) $(LDFLAGS) -o $@ $^

%.o: %.c $(HEADER_FILES)
    $(CC) -c $(CONFIG_FLAGS) $(CFLAGS) $< -o $@

clean:
    rm -f $(EXEC) *.o *~

.PHONY: clean
C=/usr/local/opt/llvm/bin/clang
CFLAGS=-O2-fopenmp
LDFLAGS=-fopenmp
EXEC=bubble.run\
mergesort.run\
奇偶运行
头文件=$(通配符*.h)
RAND_INIT=0
ifeq($(RAND_INIT),1)
$(向量的初始化是随机的)
配置标志+=-DRINIT
恩迪夫
全部:$(执行)
%.run:%.o utils.o
$(CC)$(LDFLAGS)-o$@$^
%.o:%.c$(头文件)
$(CC)-c$(配置标志)$(CFLAGS)$<-o$@
清洁:
rm-f$(执行董事)*.o*~
.假冒:干净

在Craig Estey的评论中解决。 下面是我在macOS上编译openMP的教程

  • 使用
    brew安装llvm安装llvm
  • 使用
    brew安装libomp安装libomp
  • 现在,它
    clang
    clang++
    正在调用llvm编译,OpenMP应该编译。但这就是我遇到的失踪问题

  • 使用
    find/usr/local-xdev-name'*libomp*'
    查找libomp的安装位置,可能位于
    /usr/local/opt/libomp

  • 现在,在编译makefile时,使用clang而不是cc/gcc,并将
    LDFLAGS+=-L/libomp/lib
    CFLAGS+=-I/usr/local/opt/libomp/include
    添加到make文件中。编译现在应该可以工作了。

    什么是完整的编译器/链接器命令?请编辑您的问题并在此处的代码块中发布您的Makefile。在
    fedora
    [linux]下,
    libomp。因此
    libomp
    包的一部分,名为“OpenMP runtime for clang”。因此,您必须安装与macOS等效的软件。请注意,real
    gcc
    内置了所有openmp内容[IIRC]。尝试在
    /usr/local/lib*
    中查找库。如果文件已经存在,您可能只需要添加一个
    -L
    选项。我可以在
    strace
    下运行编译器,查看它试图访问哪些文件(例如,在查找
    libomp*
    时)。我看到一个参考资料说macos没有strace,但是有truss或者dtruss来做同样的事情。另外,我可能会这样做:
    find/usr/local-xdev-name'*omp*'
    [也可以在
    /
    下]查看lib是否已经存在于非标准中place@CraigEstey我确实在brew中安装了libomp。不确定我应该用什么,或者-L做什么。如果你安装了libomp,你需要知道
    .so
    文件的完整路径。这就是我提到的
    find
    命令可以告诉您的。有关
    -L
    的信息,请参见
    man ld
    。因此,如果完整路径是:
    /usr/local/lib64/libomp.So
    ,那么您需要:
    LDFLAGS+=-L/usr/local/lib64