macOS llvm编译:ld:找不到-lomp的库
我必须使用openMP与我的大学进行一个项目。为此,我使用brew下载了llvm,并将makefile中的cc=gcc替换为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 我是这方面的初学者,但
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等效的软件。请注意,realgcc
内置了所有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