如何在Mac OS上为Python包安装C++依赖关系?

2024-10-05 13:21:02 发布

您现在位置:Python中文网/ 问答频道 /正文

有一个包含Python“绑定”的GITHUB RePO,它是我感兴趣的C++库。自述文件中有大量关于如何在Linux上安装C++库的信息,但没有关于如何使用Mac OS来进行信息处理。p>

我还打开了一个问题,要求自述文件安装说明包括除linux之外的mac OS特定安装。在这个问题上没有任何活动

以下是两份回购协议:

由于C++软件包不能通过BREW/PIP/ANACODA进行安装,我不确定该怎么走。

我的尝试:

我试过./configuremake。没有./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

这让我走得更远了。接下来,OSX不喜欢这个脚本试图安装的地方,正如this answer所解释的。因此,我在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和其他资源的列表:

我的问题

我该怎么做

如果您知道如何做到这一点,您是否还可以简要解释每个步骤背后的概念?我很乐意学习一点,而不是仅仅按照正确的顺序复制和粘贴命令


Tags: installhttpsmakeincludeconfigurelibusrlocal
2条回答

通常需要运行brew install <your C++ package>或将源代码下载到某个目录并运行一组命令:

./configure
make
make install

虽然它通常可以工作,但有些软件包不能安装在Mac上,因为它们的维护人员没有为Mac准备配置

< H2>编译C++源代码,使用Apple Clang < /H2>

我下载了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: *** No rule to make target omp_hello.c', needed by omp_hello'. Stop.

正在告诉我们文件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

相关问题 更多 >

    热门问题