您的位置:首页 >Go MIDI PortMidi 安装编译教程
发布于2026-01-30 阅读(0)
扫一扫,手机访问

本文详解在 Go 项目中正确安装和使用 PortMidi(通过 `rakyll/portmidi` 封装)的完整流程,重点解决因系统包管理器提供的 `libportmidi` 缺失符号(如 `Pt_Start`)导致的链接错误。
在 Linux 系统中直接执行 go get github.com/rakyll/portmidi 常会失败,并报出类似以下关键错误:
/usr/bin/ld: ... undefined reference to symbol 'Pt_Start' /usr/lib/libporttime.so.0: error adding symbols: DSO missing from command line
该错误本质是 动态链接阶段缺失 PortTime 库符号,根本原因在于:大多数发行版(如 Ubuntu/Debian)仓库中的 libportmidi0 包仅包含运行时库,未提供完整的静态链接支持或配套的 libporttime 开发头文件与库,而 rakyll/portmidi 的 CGO 构建依赖于 PortMidi 源码级编译环境(含 porttime 子模块)。
✅ 正确解决方案:从官方源码手动编译安装 PortMidi(含 PortTime),而非依赖系统包管理器。
下载并解压官方源码
访问 PortMIDI 官方 SourceForge 页面,下载 portmidi-src-217.zip 并解压:
wget http://sourceforge.net/projects/portmedia/files/portmidi/217/portmidi-src-217.zip/download -O portmidi.zip unzip portmidi.zip cd portmidi/pm_linux
编译并安装(需 root 权限)
进入 pm_linux 目录后,执行标准 GNU 构建流程:
make clean make sudo make install
⚠️ 注意:默认安装路径为 /usr/local(头文件到 /usr/local/include/portmidi/,库文件到 /usr/local/lib/libportmidi.so 和 /usr/local/lib/libporttime.so)。确保后续 Go 构建能识别该路径。
配置 CGO 环境变量(关键!)
在运行 go get 前,显式告知 CGO 链接器所需库路径与名称:
export CGO_LDFLAGS="-L/usr/local/lib -lportmidi -lporttime" export CGO_CFLAGS="-I/usr/local/include/portmidi" go get github.com/rakyll/portmidi
若使用 Go Modules,建议在项目根目录下验证:
// main.go
package main
import (
"log"
"github.com/rakyll/portmidi"
)
func main() {
if err := portmidi.Initialize(); err != nil {
log.Fatal(err)
}
defer portmidi.Terminate()
log.Println("PortMidi initialized successfully!")
}运行 go run main.go 应输出初始化成功日志。
通过源码编译 PortMidi,你将获得完整、可链接的开发环境,彻底规避 DSO missing from command line 和 undefined reference to 'Pt_Start' 等典型链接失败问题。
上一篇:谷歌浏览器历史版本查看与恢复方法
下一篇:前程无忧自动打招呼怎么自定义
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9