Macos 如何修改用于openMP包含的makefile

Macos 如何修改用于openMP包含的makefile,macos,gcc,makefile,openmp,Macos,Gcc,Makefile,Openmp,大家好,我是openMP和makefile的初学者。这是我的问题 我通常通过terminale编译简单的openMP代码,使用: g++-10-o file.exe-fopenmp file.cxx 现在我想修改一段代码,它包含许多链接在一起的文件,添加openMP库。事实上,我必须改变已经存在的makefile,我不知道如何去做。openMP库仅在文件“esercizio1.1.cxx”中使用 这里是makefile: esercizio1.1 : esercizio1.1.o random.

大家好,我是openMP和makefile的初学者。这是我的问题

我通常通过terminale编译简单的openMP代码,使用:

g++-10-o file.exe-fopenmp file.cxx

现在我想修改一段代码,它包含许多链接在一起的文件,添加openMP库。事实上,我必须改变已经存在的makefile,我不知道如何去做。openMP库仅在文件“esercizio1.1.cxx”中使用

这里是makefile:

esercizio1.1 : esercizio1.1.o random.o
g++ -o esercizio1.1 esercizio1.1.o random.o 

esercizio1.1.o : esercizio1.1.cxx funzioni.h random.h
g++ -c -o esercizio1.1.o esercizio1.1.cxx 

random.o : random.cxx random.h
g++ -c -o random.o random.cxx

clean:
rm esercizio1.1
下面是一个我如何尝试修改makefile的示例。我重命名了我的文件并添加了

  • g++-10-fopenmp
同时发送到所有行,每次发送一条到所有行。但仍然不起作用。这里有一个例子:

esercizio : esercizio.o random.o
g++-10 -fopenmp esercizio.o random.o -o esercizio

esercizio.o : esercizio.cc funzioni.h random.h
g++-10 -fopenmp esercizio.cc -o esercizio.o

random.o : random.cc random.h
g++ random.cc -o random.o

clean:
rm esercizio
以下是错误:

Undefined symbols for architecture x86_64:
  "__ZN6Random6RannyuEv", referenced from:
      _main._omp_fn.0 in ccA635Wn.o
  "__ZN6Random8SaveSeedEv", referenced from:
      _main in ccA635Wn.o
  "__ZN6Random9SetRandomEPiii", referenced from:
      _main in ccA635Wn.o
  "__ZN6RandomC1Ev", referenced from:
      _main in ccA635Wn.o
  "__ZN6RandomD1Ev", referenced from:
      _main in ccA635Wn.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
make: *** [esercizio.o] Error 1
是否有makefile初学者指南


无论如何,如果有人帮助我,我会很感激的。提前谢谢。

“C++编译器是挑剔的,可能会有不同的ABIs,因此不建议在同一项目中混合不同的C++编译器。您正在使用g++编译random.cc,它在macOS上是指向Apple的clang++的符号链接。改用g++-10。另外,g++-o random.o random.cc生成可执行文件,而不是对象文件。将其保留为g++-10-c-o random.o random.cc。“


感谢Hristo Iliev。谢谢。

只需在
g++
的前两次调用中添加
-fopenmp
。谢谢你的回答,Hristo。我已经尝试过了,但没有效果。我试图在第一次调用g++时添加-fopenmp,同时在第二次和第二次调用时添加-fopenmp。没有效果。好的,请更具体地说明什么不起作用RK。请在ABIs的帖子中添加一个完整的错误输出,以获得进一步的帮助。@ McMelklem,谢谢。我是这样做的。C++编译器是挑剔的,可能会有不同的C++,因此不建议在同一个项目中混合不同的C++编译器。你正在编译<代码> Realth.cc >代码>使用<代码> G++<代码>,这是MaOOS上的一个链接。苹果的
clang++
。改用
g++-10