有一个 Github 存储库,其中包含我有兴趣使用的 C++ 库的 Python“绑定”。 README 中有大量关于如何在类似 Linux 的机器上安装 C++ 库的信息,但没有关于如何在 mac OS 上安装的信息。
我还打开了一个问题,要求 README 安装说明除了 linux 之外还包括特定于 mac OS 的安装。没有关于该问题的任何活动。
这里是两个仓库:
由于无法通过 Brew/pip/anaconda 安装 C++ 包,我不确定如何开始。
我尝试过 ./configure
和 make
。没有 ./configure
文件。
要解决 ./configure
的缺失问题,请阅读一个名为 autoconf
的工具,据说它可以为您生成 ./configure
。我用 brew
安装了它,但不确定要传递什么参数。这些文档很难理解:https://www.gnu.org/software/autoconf/manual/autoconf-2.67/html_node/Making-configure-Scripts.html
仅使用 make
会导致错误叮当声:error: unsupported option '-fopenmp'
这让我陷入了一个完全不同的兔子洞,让我在 Makefile 中添加了几行:
CPP = /usr/local/opt/llvm/bin/clang
CPPFLAGS = -I/usr/local/opt/llvm/include -fopenmp
LDFLAGS = -L/usr/local/opt/llvm/lib
omp_hello: omp_hello.c
$(CPP) $(CPPFLAGS) $^ -o $@ $(LDFLAGS)
那感觉很危险,因为我不知道这些东西是什么意思。此外,它导致了一个新错误:*** missing separator. Stop.
然后我读到这可能是由于使用“软”标签而不是“硬”标签,后者可以使用 cat -e -t -v makefile_name
进行识别。我找到了缺少“硬”选项卡的一行(上面的缩进线)并将其插入。这导致了一个新的错误:
make: *** No rule to make target `omp_hello.c', needed by `omp_hello'. Stop.
接下来,按照杨玉石的建议和他对评论的关注,我根据他的回答更改了第 39 和 40 行,并在 CXXFLAGS
变量中添加了一些附加文件的位置:
-I//opt/homebrew/Cellar/libomp/11.0.1/include
-L/opt/homebrew/Cellar/libomp/11.0.1/lib
这让我更进一步。其次,正如 this answer 所解释的,OSX 不喜欢这个脚本试图安装的位置。所以我在 makefile 中更改了这两行,这似乎指示了安装位置:
INSTALL_HEAD_DIR = $(DESTDIR)/usr/include/libspot
INSTALL_LIB_DIR = $(DESTDIR)/usr/lib
到
INSTALL_HEAD_DIR = $(DESTDIR)/usr/local/include/libspot
INSTALL_LIB_DIR = $(DESTDIR)/usr/local/lib
这确实让我走得更远。接下来,我遇到了一个错误,抱怨 makefile 中这些行的平面 -t
:
@install -t $(INSTALL_LIB_DIR) $(LIB_DIR)/*.so
@install -t $(INSTALL_HEAD_DIR) $(INC_DIR)/*.h
所以我删除了那些标志,然后导致了这个错误:
Checking the headers installation directory (/usr/local/include/libspot)
Checking the library installation directory (/usr/local/lib)
Installing the shared library (libspot.so)
install: /usr/local/lib: Inappropriate file type or format
我找不到阅读材料,也不知道如何解决。任何进一步的帮助表示赞赏。
以下是我为回答这个问题而仔细阅读的 SO 和其他资源的列表:
我该如何进行。
如果您知道如何执行此操作,能否还简要说明每个步骤背后的概念?我很乐意学习一点,而不仅仅是按正确的顺序复制和粘贴命令。
答案 0 :(得分:1)
我下载了 prjoect (libspot) 并在我的 Mac 上成功编译了它。我更改了 Makefile 中的两行(39 和 40)以使其工作。 (在this answer之后)
CC = clang++ # change from g++ to default Apple clang
CXXFLAGS = -std=c++11 -Wall -pedantic -Xpreprocessor -fopenmp -lomp # additional flags
您应该通过输入带有“正确”Makefile 的 make
来获取二进制文件。
(如果您看到类似“无法找到 omp.h”的内容,请将 -I/usr/local/opt/libomp/include
添加到 CXXFLAGS
。)
更新后的问题描述中的错误信息
<块引用>make: *** 没有生成目标 omp_hello.c', needed by
omp_hello' 的规则。停止。
告诉我们文件 omp_hello.c
丢失。编写 Makefile 以将源代码 omp_hello.c
编译为可执行二进制文件 omp_hello
。如果我有 C 源文件 (omp_hello.c
),Makefile 将允许我通过键入
make
代替
/usr/local/opt/llvm/bin/clang \
-I/usr/local/opt/llvm/include -fopenmp \
-L/usr/local/opt/llvm/lib \
omp_hello.c -o omp_hello
这只是一个普通的编译过程,与Python无关。错误消息指出要编译的源代码 (omp_hello.c
) 丢失。
看起来这是一个带有自定义 Makefile 的小项目。通常你只用 make
编译代码。您得到的错误似乎表明缺少 llvm。您可能想尝试按照 this answer 安装 llvm。
答案 1 :(得分:0)
通常是运行 batch_first = True
或将源代码下载到某个目录并运行一组命令:
brew install <your C++ package>
虽然通常可以使用,但由于维护人员没有为 Mac 准备配置,因此某些软件包无法在 Mac 上安装。