尝试编译 libeemd 时找不到库

Library not found when trying to compile libeemd

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

我正在尝试编译和安装 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

我承认,我在这类事情上没有太多经验,但我希望你们中的一些聪明人能给我一些关于我将如何解决这个问题的建议.

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

谢谢!

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

一个更简单的解决方案是使用 homebrew 并安装 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 $@

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

这里的问题是,虽然项目声明该库将适用于每个编译器 (c99),但 Makefile 已适应 gcc。

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

另请参阅此 post:Error enabling openmp - "ld: library not found for -lgomp" and Clang errors