Mac arm64环境配置全局可用本地C包及Makefile编写咨询
解决方案
首先先修复你之前编译cubature时的架构不匹配问题:你日志中出现的ld警告是因为cmake未指定目标架构,编译生成的目标文件为arm64,但链接阶段默认按x86_64架构生成动态库,最终产出的动态库无法在arm64环境下正常链接。重新正确编译安装的步骤如下:
- 删除cubature源码目录下旧的build文件夹,重新创建空build目录并进入
- 执行cmake命令时指定架构与安装路径,如果你要使用系统默认统一安装路径就用
/usr/local,要自定义固定路径就替换成你自己的目录,比如/Users/surrutiaquir/opt/cubature:
cmake .. -DCMAKE_OSX_ARCHITECTURES=arm64 -DCMAKE_INSTALL_PREFIX=/usr/local
- 依次执行
make、make install完成安装,此时不会再出现架构相关警告,头文件会被安装到目标路径的include子目录,动态库会被安装到lib子目录。
编写Makefile引用已安装的cubature库
安装完成后,你源码里的头文件引用可以直接改成标准写法,不需要再写相对路径:
#include <cubature.h>
根据你的安装路径选择对应的Makefile配置:
场景1:安装到系统默认路径/usr/local
这种场景不需要额外指定头文件和库的搜索路径,Makefile参考如下:
CC = cc CFLAGS = -Wall -O2 LDFLAGS = -lcubature # 替换为你自己的目标程序名与源码文件 TARGET = your_integration_program SRCS = main.c all: $(TARGET) $(TARGET): $(SRCS) $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) clean: rm -f $(TARGET)
如果编译时提示找不到头文件或库,先执行
xcode-select --install安装Xcode命令行工具,会自动将/usr/local下的头文件、库路径加入系统默认搜索路径。
场景2:安装到自定义固定路径
这种场景需要在编译参数中手动指定头文件搜索路径、库搜索路径,如果运行程序时提示找不到动态库,还需要指定运行时库搜索路径(rpath),Makefile参考如下:
CC = cc # 替换为你实际的cubature安装根目录 CUBATURE_PATH = /Users/surrutiaquir/opt/cubature CFLAGS = -Wall -O2 -I$(CUBATURE_PATH)/include LDFLAGS = -L$(CUBATURE_PATH)/lib -lcubature # 若运行时提示找不到libcubature.dylib,取消下一行的注释 # LDFLAGS += -Wl,-rpath,$(CUBATURE_PATH)/lib # 替换为你自己的目标程序名与源码文件 TARGET = your_integration_program SRCS = main.c all: $(TARGET) $(TARGET): $(SRCS) $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) clean: rm -f $(TARGET)
内容的提问来源于stack exchange,提问作者surrutiaquir
相关产品推荐
相关产品推荐

