在macOS与Xcode中使用C++调用RtMidi库的问题求助
在macOS上用Xcode/CMake配置RtMidi解决API缺失问题
直接用Xcode解决的步骤
1. 添加预编译宏指定CoreMIDI API
RtMidi靠预编译宏决定编译哪个平台的API,你得手动指定MACOSX_CORE:
- 打开Xcode项目,选中你的target,切换到
Build Settings标签 - 在搜索框输入
Preprocessor Macros - 把Debug和Release栏都加上
MACOSX_CORE(或者写MACOSX_CORE=1,效果一致)
2. 链接必要的系统框架
RtMidi依赖macOS的CoreMIDI、CoreAudio、CoreFoundation框架,必须链接:
- 切换到target的
Build Phases标签,找到Link Binary With Libraries - 点击+号,分别搜索
CoreMidi、CoreAudio、CoreFoundation并添加进去
3. 确认文件与路径配置
- 如果直接用RtMidi源码,确保
RtMidi.h和RtMidi.cpp都在项目中;如果头文件在单独文件夹,就在Build Settings的Header Search Paths里添加对应路径 - 如果之前编译了RtMidi的静态/动态库,把库文件拖进项目,并在
Library Search Paths里指定库的路径
用CMake构建(更适合跨平台)
如果以后需要跨平台开发,CMake是更省心的选择,步骤如下:
- 在项目根目录创建
CMakeLists.txt,内容如下:
cmake_minimum_required(VERSION 3.15) project(YourMidiApp) # 设置C++版本,RtMidi至少需要C++11 set(CMAKE_CXX_STANDARD 11) # 定义MACOSX_CORE宏,指定使用CoreMIDI API add_definitions(-DMACOSX_CORE) # 查找macOS系统框架 find_library(CORE_MIDI CoreMIDI) find_library(CORE_AUDIO CoreAudio) find_library(CORE_FOUNDATION CoreFoundation) # 添加可执行文件,把你的主代码和RtMidi.cpp都加进去 add_executable(YourMidiApp main.cpp RtMidi.cpp) # 链接依赖的框架 target_link_libraries(YourMidiApp ${CORE_MIDI} ${CORE_AUDIO} ${CORE_FOUNDATION} )
- 终端执行构建:
# 创建build文件夹并进入 mkdir build && cd build # 生成Makefile(要生成Xcode项目就用cmake .. -G Xcode) cmake .. # 编译 make # 运行程序 ./YourMidiApp
错误原因说明
RtMidi默认不会自动启用任何平台API,必须通过预编译宏指定要编译的API(比如macOS的MACOSX_CORE);同时CoreMIDI等系统框架是RtMidi在macOS上的底层依赖,不链接的话会出现符号缺失的错误。
内容的提问来源于stack exchange,提问作者sebastien deepwali
相关产品推荐
相关产品推荐

