尝试编译libeemd时找不到库

时间:2015-12-12 21:37:07

标签: c macos openmp

不确定这是正确的论坛,但无论如何我都会试一试。

我正在尝试编译和安装libeemd库(https://bitbucket.org/luukko/libeemd)。我的最终目标是在稍后使用MEX将C库包含在Matlab脚本中,但是,我遇到了障碍。

根据包中包含的README文件,我可以在顶级目录中使用make编译库,但是,当完成后,我得到以下结果

Alexanders-MacBook-Pro-2:libeemd neergaard$ make
gcc -Wall -Wextra -std=c99 -pedantic -Wno-unknown-pragmas -Wshadow -Wpointer-arith  -g -DEEMD_DEBUG=0 -fopenmp src/eemd.c -fPIC -shared -Wl,-soname,libeemd.so.1.3 -I/opt/local/include -L/opt/local/lib -lgsl -lgslcblas -lm  -DHAVE_INLINE -o libeemd.so.1.3
ld: library not found for -lgomp
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [libeemd.so.1.3] Error 1

我会承认,我在这类事情上没有那么多经验,但我希望你们中的一些聪明人能给我一些关于如何解决这个问题的指示。 / p>

非常感谢任何帮助。如果我没有提供足够的信息,请告诉我。

谢谢!

1 个答案:

答案 0 :(得分:0)

从几年开始,OS X中的默认编译器是 clang (llvm)而不是gcc。链接器告诉你它找不到openMP(libgomp),这是因为clang还没有包含它,但是支持似乎现在已经完成了,你可以通过下载最新版本的llvm来安装它:{{3 }}

更简单的解决方案是使用https://clang-omp.github.io并安装clang-omp:

brew install clang-omp

将安装一个完全支持openMP(clang-omp ++)的编译器。

然后你必须修改Makefile,首先根据你的安装路径设置PREFIX,然后修改以下几行:

gcc $(commonflags) -c $< $(gsl_flags) -o $@

为:

clang-omp $(commonflags) -c $< $(gsl_flags) -o $@

gcc $(commonflags) $< -fPIC -shared -Wl,-soname,$@ $(gsl_flags) -o $@

为:

clang-omp $(commonflags) $< -fPIC -shared -Wl, $(gsl_flags) -o $@

我能够编译库和示例,并在我的OS X 10.10.5上使用clang-omp版本3.5.0运行其中一个。

这里的问题是,当项目声明该库将与每个编译器(c99)一起使用时,Makefile适用于gcc。

另一个选择是安装和使用gcc。

另见这篇文章:homebrew