6.5840 Lab1:Ubuntu22.04下GoLand无法加载wc.so插件求助
问题分析
终端运行正常是因为分两步操作:先编译插件,再运行mrsequential;但GoLand的自动运行配置直接跳过了插件编译步骤,还把编译插件的参数错误传给了mrsequential程序,导致两个核心问题:
/home/maikle/Downloads/lab/6.5840/src/main/wc.so文件不存在(未提前编译生成)- 运行
mrsequential时传入了无效的编译参数
解决步骤
1. 手动编译插件(先确保文件存在)
在GoLand终端或系统终端执行编译命令,生成wc.so:
go build -buildmode=plugin ../mrapps/wc.go
执行后检查/home/maikle/Downloads/lab/6.5840/src/main/目录下是否生成了wc.so文件。
2. 修正GoLand运行配置
打开Run > Edit Configurations,调整配置项:
- 清理无效参数:把
-buildmode=plugin -gcflags=all=-N -l ../mrapps/wc.go从「Program arguments」中全部删除 - 保留正确运行参数:只保留
wc.so pg*.txt(如果pg*.txt不在当前工作目录,需填写完整路径) - 设置正确工作目录:将「Working directory」设为
/home/maikle/Downloads/lab/6.5840/src/main/,确保程序能找到wc.so和文本文件
3. (可选)添加自动编译插件的前置任务
为避免每次手动编译插件,可配置自动前置任务:
- 在运行配置的「Before launch」区域点击
+,选择「Run External Tool」 - 新建External Tool:
- 名称:
Build MR Plugin - 程序:
/usr/lib/go-1.18/bin/go - 参数:
build -buildmode=plugin ../mrapps/wc.go - 工作目录:
/home/maikle/Downloads/lab/6.5840/src/main/
- 名称:
- 保存后,每次运行
mrsequential前,GoLand会自动编译插件
验证
配置完成后,GoLand的执行命令应类似:
/usr/lib/go-1.18/bin/go build -o [缓存路径]/___go_build_6_5840_main /home/maikle/Downloads/lab/6.5840/src/main/mrsequential.go /home/maikle/.cache/JetBrains/GoLand2023.3/tmp/GoLand/___go_build_6_5840_main wc.so pg*.txt
此时程序可正常加载插件并运行。
内容的提问来源于stack exchange,提问作者maikle
相关产品推荐
相关产品推荐

