hamlib 0.2.7 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,640 @@
1
+ # 从源码构建 Hamlib
2
+
3
+ 本指南介绍如何在各个平台上从源码构建最新版本的 Hamlib 库,并使用它来构建 node-hamlib。
4
+
5
+ ## 目录
6
+
7
+ - [为什么从源码构建](#为什么从源码构建)
8
+ - [快速开始](#快速开始)
9
+ - [前置依赖](#前置依赖)
10
+ - [使用自动化构建脚本](#使用自动化构建脚本)
11
+ - [手动构建步骤](#手动构建步骤)
12
+ - [验证安装](#验证安装)
13
+ - [常见问题](#常见问题)
14
+ - [平台特定说明](#平台特定说明)
15
+
16
+ ---
17
+
18
+ ## 为什么从源码构建
19
+
20
+ 从 Hamlib 源码构建有以下优势:
21
+
22
+ ### ✅ 优势
23
+
24
+ 1. **获取最新功能** - 使用最新的 Hamlib 开发版本,包含最新的设备支持和 bug 修复
25
+ 2. **版本控制** - 精确控制使用的 Hamlib 版本,而不依赖系统包管理器
26
+ 3. **优化构建** - 可以根据需要定制构建选项,减少不必要的依赖
27
+ 4. **跨平台一致性** - 在所有平台使用相同的构建流程,避免系统包版本差异
28
+ 5. **开发和调试** - 方便修改和调试 Hamlib 源码
29
+
30
+ ### ⚠️ 注意事项
31
+
32
+ 1. **构建时间** - 从源码编译需要 5-10 分钟(取决于 CPU)
33
+ 2. **磁盘空间** - 需要约 200-300MB 的临时空间用于编译
34
+ 3. **依赖工具** - 需要安装编译工具链(autotools, gcc/clang)
35
+
36
+ ---
37
+
38
+ ## 快速开始
39
+
40
+ 最简单的方法是使用我们提供的自动化构建脚本:
41
+
42
+ ```bash
43
+ # 使用默认设置构建(推荐)
44
+ node scripts/build-hamlib.js
45
+
46
+ # 最小化构建(减少依赖和构建时间)
47
+ node scripts/build-hamlib.js --minimal
48
+
49
+ # 安装到自定义目录(无需 sudo)
50
+ node scripts/build-hamlib.js --prefix=$HOME/local/hamlib --minimal
51
+
52
+ # 查看帮助
53
+ node scripts/build-hamlib.js --help
54
+ ```
55
+
56
+ ---
57
+
58
+ ## 前置依赖
59
+
60
+ ### Linux (Ubuntu/Debian)
61
+
62
+ ```bash
63
+ # 基础编译工具
64
+ sudo apt-get update
65
+ sudo apt-get install -y autoconf automake libtool pkg-config make gcc g++
66
+
67
+ # 可选:USB 设备支持
68
+ sudo apt-get install -y libusb-1.0-0-dev
69
+
70
+ # 可选:其他功能
71
+ sudo apt-get install -y libxml2-dev libreadline-dev
72
+ ```
73
+
74
+ ### Linux (CentOS/RHEL/Fedora)
75
+
76
+ ```bash
77
+ # 基础编译工具
78
+ sudo yum install -y autoconf automake libtool pkgconfig make gcc gcc-c++
79
+
80
+ # 可选:USB 设备支持
81
+ sudo yum install -y libusb1-devel
82
+
83
+ # 可选:其他功能
84
+ sudo yum install -y libxml2-devel readline-devel
85
+ ```
86
+
87
+ ### macOS
88
+
89
+ ```bash
90
+ # 安装 Homebrew(如果尚未安装)
91
+ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
92
+
93
+ # 安装编译工具
94
+ brew install autoconf automake libtool
95
+
96
+ # 可选:USB 设备支持
97
+ brew install libusb
98
+ ```
99
+
100
+ ### Windows
101
+
102
+ **推荐:使用官方预编译包**
103
+
104
+ Windows 平台从源码构建 Hamlib 比较复杂,需要完整的 MSYS2/MinGW 环境。对于大多数用户,我们推荐使用官方预编译包:
105
+
106
+ 下载地址:https://github.com/Hamlib/Hamlib/releases
107
+
108
+ 如果确实需要从源码构建,请参考 [Hamlib 官方文档](https://github.com/Hamlib/Hamlib/blob/master/README.windows.md)。
109
+
110
+ ---
111
+
112
+ ## 使用自动化构建脚本
113
+
114
+ 我们提供了 `scripts/build-hamlib.js` 来自动化整个构建流程。
115
+
116
+ ### 基本用法
117
+
118
+ ```bash
119
+ # 1. 安装到项目本地目录(CI 默认行为)
120
+ node scripts/build-hamlib.js --prefix=$PWD/hamlib-build --minimal
121
+
122
+ # 2. 设置环境变量
123
+ export HAMLIB_PREFIX=$PWD/hamlib-build
124
+ export LD_LIBRARY_PATH=$PWD/hamlib-build/lib:$LD_LIBRARY_PATH # Linux
125
+ # 或
126
+ export DYLD_LIBRARY_PATH=$PWD/hamlib-build/lib:$DYLD_LIBRARY_PATH # macOS
127
+
128
+ # 3. 构建 node-hamlib
129
+ npm run rebuild
130
+
131
+ # 4. 运行测试
132
+ npm test
133
+ ```
134
+
135
+ ### 安装到系统目录
136
+
137
+ ```bash
138
+ # 安装到 /usr/local(需要 sudo)
139
+ node scripts/build-hamlib.js --prefix=/usr/local
140
+
141
+ # 安装到用户目录(不需要 sudo)
142
+ node scripts/build-hamlib.js --prefix=$HOME/local/hamlib
143
+
144
+ # 构建 node-hamlib 时指定路径
145
+ export HAMLIB_PREFIX=$HOME/local/hamlib
146
+ npm run rebuild
147
+ ```
148
+
149
+ ### 脚本选项
150
+
151
+ | 选项 | 说明 |
152
+ |------|------|
153
+ | `--prefix=<path>` | 指定安装路径。CI 环境默认为 `./hamlib-build`,手动构建默认为 `/usr/local` |
154
+ | `--minimal` | 最小化构建,禁用不必要的功能(如 XML、readline、语言绑定等),减少依赖和构建时间 |
155
+ | `--help` | 显示帮助信息 |
156
+
157
+ ### 构建流程说明
158
+
159
+ 自动化脚本会执行以下步骤:
160
+
161
+ 1. **检查构建工具** - 验证 git, autoconf, automake, libtool, make 是否安装
162
+ 2. **克隆源码** - 从 GitHub 克隆最新的 Hamlib 源码
163
+ 3. **生成配置** - 运行 `./bootstrap` 生成 configure 脚本
164
+ 4. **配置构建** - 运行 `./configure` 设置安装路径和构建选项
165
+ 5. **编译** - 并行编译(使用所有 CPU 核心)
166
+ 6. **安装** - 安装到指定目录
167
+ 7. **验证** - 检查安装的头文件和库文件
168
+
169
+ ---
170
+
171
+ ## 手动构建步骤
172
+
173
+ 如果你更喜欢手动控制构建流程,可以按照以下步骤操作。
174
+
175
+ ### 步骤 1: 克隆 Hamlib 源码
176
+
177
+ ```bash
178
+ git clone --depth 1 https://github.com/Hamlib/Hamlib.git
179
+ cd Hamlib
180
+ ```
181
+
182
+ **注意**:使用 `--depth 1` 可以只克隆最新提交,减少下载时间和磁盘占用。
183
+
184
+ ### 步骤 2: 生成构建配置
185
+
186
+ ```bash
187
+ ./bootstrap
188
+ ```
189
+
190
+ 这一步会使用 autotools 生成 `configure` 脚本。
191
+
192
+ ### 步骤 3: 配置构建选项
193
+
194
+ #### 基本配置(推荐)
195
+
196
+ ```bash
197
+ ./configure \
198
+ --prefix=/usr/local \
199
+ --enable-shared=yes \
200
+ --enable-static=no
201
+ ```
202
+
203
+ #### 最小化配置(减少依赖)
204
+
205
+ ```bash
206
+ ./configure \
207
+ --prefix=/usr/local \
208
+ --enable-shared=yes \
209
+ --enable-static=no \
210
+ --disable-winradio \
211
+ --without-cxx-binding \
212
+ --without-perl-binding \
213
+ --without-python-binding \
214
+ --without-tcl-binding \
215
+ --without-lua-binding \
216
+ --without-readline \
217
+ --without-xml-support
218
+ ```
219
+
220
+ #### 安装到用户目录(无需 sudo)
221
+
222
+ ```bash
223
+ ./configure \
224
+ --prefix=$HOME/local/hamlib \
225
+ --enable-shared=yes \
226
+ --enable-static=no \
227
+ --without-cxx-binding \
228
+ --without-perl-binding \
229
+ --without-python-binding \
230
+ --without-readline \
231
+ --without-xml-support
232
+ ```
233
+
234
+ ### 步骤 4: 编译
235
+
236
+ ```bash
237
+ # 并行编译(使用所有 CPU 核心)
238
+ make -j$(nproc) # Linux
239
+ make -j$(sysctl -n hw.ncpu) # macOS
240
+
241
+ # 可选:运行测试
242
+ make check
243
+ ```
244
+
245
+ ### 步骤 5: 安装
246
+
247
+ ```bash
248
+ # 安装到系统目录(需要 sudo)
249
+ sudo make install
250
+
251
+ # 或安装到用户目录(不需要 sudo)
252
+ make install
253
+ ```
254
+
255
+ ### 步骤 6: 更新库缓存(仅 Linux)
256
+
257
+ ```bash
258
+ # 如果安装到 /usr/local
259
+ sudo ldconfig
260
+ ```
261
+
262
+ ---
263
+
264
+ ## 验证安装
265
+
266
+ ### 检查安装的文件
267
+
268
+ ```bash
269
+ # 检查头文件
270
+ ls -la /usr/local/include/hamlib/
271
+
272
+ # 检查库文件(Linux)
273
+ ls -la /usr/local/lib/libhamlib*
274
+
275
+ # 检查库文件(macOS)
276
+ ls -la /usr/local/lib/libhamlib*.dylib
277
+
278
+ # 检查工具
279
+ which rigctl rigctld
280
+ ```
281
+
282
+ ### 测试 Hamlib 工具
283
+
284
+ ```bash
285
+ # 查看版本
286
+ rigctl --version
287
+
288
+ # 列出支持的设备
289
+ rigctl -l
290
+
291
+ # 测试虚拟设备
292
+ rigctl -m 1 -r /dev/ttyUSB0
293
+ ```
294
+
295
+ ### 使用 pkg-config 验证
296
+
297
+ ```bash
298
+ # 查看安装信息
299
+ pkg-config --modversion hamlib
300
+ pkg-config --cflags hamlib
301
+ pkg-config --libs hamlib
302
+ ```
303
+
304
+ ---
305
+
306
+ ## 常见问题
307
+
308
+ ### Q1: 提示缺少 autoconf/automake/libtool
309
+
310
+ **问题**:运行 `./bootstrap` 时报错找不到工具。
311
+
312
+ **解决方案**:
313
+
314
+ ```bash
315
+ # Linux (Ubuntu/Debian)
316
+ sudo apt-get install autoconf automake libtool
317
+
318
+ # Linux (CentOS/RHEL)
319
+ sudo yum install autoconf automake libtool
320
+
321
+ # macOS
322
+ brew install autoconf automake libtool
323
+ ```
324
+
325
+ ### Q2: configure 时提示缺少依赖
326
+
327
+ **问题**:`./configure` 报错缺少某些库。
328
+
329
+ **解决方案**:
330
+
331
+ 方案 1(推荐):使用 `--minimal` 禁用不必要的功能:
332
+
333
+ ```bash
334
+ node scripts/build-hamlib.js --minimal
335
+ ```
336
+
337
+ 方案 2:安装缺少的依赖库。
338
+
339
+ ### Q3: 编译时内存不足
340
+
341
+ **问题**:系统内存小于 1GB 时,并行编译可能导致内存不足。
342
+
343
+ **解决方案**:
344
+
345
+ 减少并行编译的线程数:
346
+
347
+ ```bash
348
+ make -j2 # 只使用 2 个线程
349
+ make # 串行编译(不使用并行)
350
+ ```
351
+
352
+ ### Q4: node-hamlib 找不到 Hamlib 库
353
+
354
+ **问题**:构建 node-hamlib 时报错找不到 hamlib 头文件或库。
355
+
356
+ **解决方案**:
357
+
358
+ 设置 `HAMLIB_PREFIX` 环境变量:
359
+
360
+ ```bash
361
+ export HAMLIB_PREFIX=/path/to/hamlib/install
362
+ export PKG_CONFIG_PATH=$HAMLIB_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH
363
+
364
+ # Linux
365
+ export LD_LIBRARY_PATH=$HAMLIB_PREFIX/lib:$LD_LIBRARY_PATH
366
+
367
+ # macOS
368
+ export DYLD_LIBRARY_PATH=$HAMLIB_PREFIX/lib:$DYLD_LIBRARY_PATH
369
+
370
+ npm run rebuild
371
+ ```
372
+
373
+ ### Q5: 运行时找不到动态库
374
+
375
+ **问题**:运行程序时报错找不到 `libhamlib.so` 或 `libhamlib.dylib`。
376
+
377
+ **解决方案**:
378
+
379
+ **Linux**:
380
+
381
+ ```bash
382
+ # 方案 1:设置 LD_LIBRARY_PATH
383
+ export LD_LIBRARY_PATH=/path/to/hamlib/lib:$LD_LIBRARY_PATH
384
+
385
+ # 方案 2:添加到系统库路径
386
+ echo "/path/to/hamlib/lib" | sudo tee /etc/ld.so.conf.d/hamlib.conf
387
+ sudo ldconfig
388
+
389
+ # 方案 3:使用 RPATH(编译时设置)
390
+ # 已在 binding.gyp 中配置
391
+ ```
392
+
393
+ **macOS**:
394
+
395
+ ```bash
396
+ # 方案 1:设置 DYLD_LIBRARY_PATH
397
+ export DYLD_LIBRARY_PATH=/path/to/hamlib/lib:$DYLD_LIBRARY_PATH
398
+
399
+ # 方案 2:使用 install_name_tool(推荐)
400
+ # 已由 bundle-macos.sh 自动处理
401
+ ```
402
+
403
+ ### Q6: Windows 构建失败
404
+
405
+ **问题**:在 Windows 上构建遇到各种错误。
406
+
407
+ **解决方案**:
408
+
409
+ Windows 从源码构建比较复杂。推荐方案:
410
+
411
+ 1. 使用官方预编译包(推荐)
412
+ 2. 使用 WSL(Windows Subsystem for Linux)按照 Linux 步骤构建
413
+ 3. 安装完整的 MSYS2 环境
414
+
415
+ ### Q7: CI 构建时间过长
416
+
417
+ **问题**:GitHub Actions 或其他 CI 环境中构建时间超过 10 分钟。
418
+
419
+ **解决方案**:
420
+
421
+ 1. 使用 `--minimal` 选项减少构建时间
422
+ 2. 缓存构建结果
423
+ 3. 考虑使用预编译包代替源码构建
424
+
425
+ ---
426
+
427
+ ## 平台特定说明
428
+
429
+ ### Linux
430
+
431
+ #### Ubuntu/Debian
432
+
433
+ ```bash
434
+ # 完整步骤
435
+ sudo apt-get update
436
+ sudo apt-get install -y autoconf automake libtool pkg-config make gcc g++
437
+ node scripts/build-hamlib.js --prefix=$HOME/local/hamlib --minimal
438
+ export HAMLIB_PREFIX=$HOME/local/hamlib
439
+ export LD_LIBRARY_PATH=$HAMLIB_PREFIX/lib:$LD_LIBRARY_PATH
440
+ npm run rebuild
441
+ ```
442
+
443
+ #### CentOS/RHEL
444
+
445
+ ```bash
446
+ # 完整步骤
447
+ sudo yum install -y autoconf automake libtool pkgconfig make gcc gcc-c++
448
+ node scripts/build-hamlib.js --prefix=$HOME/local/hamlib --minimal
449
+ export HAMLIB_PREFIX=$HOME/local/hamlib
450
+ export LD_LIBRARY_PATH=$HAMLIB_PREFIX/lib:$LD_LIBRARY_PATH
451
+ npm run rebuild
452
+ ```
453
+
454
+ #### 架构支持
455
+
456
+ - **x86_64** - 完全支持
457
+ - **aarch64 (ARM64)** - 完全支持
458
+ - **armv7l (ARM32)** - 支持,但需要确保有足够内存编译
459
+
460
+ ### macOS
461
+
462
+ #### Intel Mac
463
+
464
+ Homebrew 安装在 `/usr/local`:
465
+
466
+ ```bash
467
+ brew install autoconf automake libtool
468
+ node scripts/build-hamlib.js --prefix=$HOME/local/hamlib --minimal
469
+ export HAMLIB_PREFIX=$HOME/local/hamlib
470
+ npm run rebuild
471
+ ```
472
+
473
+ #### Apple Silicon (M1/M2/M3)
474
+
475
+ Homebrew 安装在 `/opt/homebrew`:
476
+
477
+ ```bash
478
+ brew install autoconf automake libtool
479
+ node scripts/build-hamlib.js --prefix=$HOME/local/hamlib --minimal
480
+ export HAMLIB_PREFIX=$HOME/local/hamlib
481
+ npm run rebuild
482
+ ```
483
+
484
+ #### 注意事项
485
+
486
+ 1. **Xcode Command Line Tools** - 确保已安装:`xcode-select --install`
487
+ 2. **Rosetta** - Apple Silicon 可以运行 x86_64 和 arm64 两种架构
488
+ 3. **System Integrity Protection (SIP)** - 可能阻止修改系统目录,建议安装到用户目录
489
+
490
+ ### Windows
491
+
492
+ #### 推荐方案:使用预编译包
493
+
494
+ ```powershell
495
+ # 下载官方预编译包
496
+ # https://github.com/Hamlib/Hamlib/releases
497
+
498
+ # 解压到 C:\hamlib
499
+ # 设置环境变量
500
+ $env:HAMLIB_ROOT = "C:\hamlib"
501
+
502
+ # 构建 node-hamlib
503
+ npm run rebuild
504
+ ```
505
+
506
+ #### 高级方案:使用 WSL2
507
+
508
+ 在 Windows 11 或 Windows 10 (2004+) 上使用 WSL2:
509
+
510
+ ```bash
511
+ # 在 WSL2 中按照 Linux 步骤操作
512
+ wsl --install -d Ubuntu
513
+ wsl
514
+
515
+ # 进入 WSL2 后
516
+ cd /mnt/c/your/project
517
+ sudo apt-get update
518
+ sudo apt-get install -y autoconf automake libtool
519
+ node scripts/build-hamlib.js --minimal
520
+ npm run rebuild
521
+ ```
522
+
523
+ #### 高级方案:使用 MSYS2
524
+
525
+ 如果必须在 Windows 原生环境中构建:
526
+
527
+ 1. 安装 [MSYS2](https://www.msys2.org/)
528
+ 2. 在 MSYS2 终端中安装工具链:
529
+ ```bash
530
+ pacman -S base-devel mingw-w64-x86_64-toolchain autoconf automake libtool
531
+ ```
532
+ 3. 克隆 Hamlib 并构建
533
+ 4. 设置 `HAMLIB_ROOT` 环境变量
534
+
535
+ ---
536
+
537
+ ## 进阶配置
538
+
539
+ ### 使用特定版本的 Hamlib
540
+
541
+ 如果需要使用特定版本而不是最新版本:
542
+
543
+ ```bash
544
+ git clone https://github.com/Hamlib/Hamlib.git
545
+ cd Hamlib
546
+ git checkout 4.6.5 # 切换到特定标签或分支
547
+ ./bootstrap
548
+ ./configure --prefix=/usr/local --minimal
549
+ make -j$(nproc)
550
+ sudo make install
551
+ ```
552
+
553
+ ### 启用 USB 设备支持
554
+
555
+ ```bash
556
+ # Linux: 安装 libusb
557
+ sudo apt-get install -y libusb-1.0-0-dev
558
+
559
+ # macOS: 安装 libusb
560
+ brew install libusb
561
+
562
+ # 构建时会自动检测并启用
563
+ ./configure --prefix=/usr/local --with-libusb=yes
564
+ ```
565
+
566
+ ### 启用 XML 支持
567
+
568
+ ```bash
569
+ # Linux
570
+ sudo apt-get install -y libxml2-dev
571
+
572
+ # macOS
573
+ brew install libxml2
574
+
575
+ # 构建
576
+ ./configure --prefix=/usr/local --with-xml-support=yes
577
+ ```
578
+
579
+ ### 静态链接
580
+
581
+ 如果需要静态链接 Hamlib(减少运行时依赖):
582
+
583
+ ```bash
584
+ ./configure \
585
+ --prefix=/usr/local \
586
+ --enable-shared=no \
587
+ --enable-static=yes
588
+ ```
589
+
590
+ **注意**:node-hamlib 默认配置为动态链接。
591
+
592
+ ---
593
+
594
+ ## 清理和卸载
595
+
596
+ ### 清理构建文件
597
+
598
+ ```bash
599
+ cd Hamlib
600
+ make clean # 清理编译产物
601
+ make distclean # 清理所有生成文件
602
+ ```
603
+
604
+ ### 卸载 Hamlib
605
+
606
+ ```bash
607
+ cd Hamlib
608
+ sudo make uninstall
609
+
610
+ # 手动清理(如果 make uninstall 不可用)
611
+ sudo rm -rf /usr/local/include/hamlib
612
+ sudo rm -f /usr/local/lib/libhamlib*
613
+ sudo rm -f /usr/local/bin/rigctl*
614
+ sudo rm -f /usr/local/bin/rotctl*
615
+ ```
616
+
617
+ ---
618
+
619
+ ## 参考资源
620
+
621
+ - [Hamlib 官方网站](https://hamlib.github.io/)
622
+ - [Hamlib GitHub 仓库](https://github.com/Hamlib/Hamlib)
623
+ - [Hamlib 构建文档](https://github.com/Hamlib/Hamlib/blob/master/README)
624
+ - [node-hamlib 项目](https://github.com/your-repo/node-hamlib)
625
+
626
+ ---
627
+
628
+ ## 贡献和反馈
629
+
630
+ 如果在构建过程中遇到问题或有改进建议,欢迎:
631
+
632
+ 1. 提交 [GitHub Issue](https://github.com/your-repo/node-hamlib/issues)
633
+ 2. 参与 [Discussions](https://github.com/your-repo/node-hamlib/discussions)
634
+ 3. 提交 Pull Request
635
+
636
+ ---
637
+
638
+ **最后更新**: 2024-11-07
639
+
640
+ 如有问题,请参考 [故障排除指南](troubleshooting.md) 或在项目 Issues 中提问。