---
title: "记录一下,编译mangosone时出现的小问题"
url: "https://yjyj.net/learn/4695.html"
author: "小 虾 (生猛大蝦编辑部)"
published_at: "2014-07-20T04:42:57+08:00"
updated_at: "2014-07-20T04:43:34+08:00"
categories: "招数学习"
tags: "linux, Linux运维, mangosone, wow, 极客开源资源"
summary: "编译 mangosone 时卡在 vmapextractor 链接报错“cannot find -lmpq”？本文直接给出两种可落地的修复思路：调整编译参数启用外部依赖，或手动编译 dep/libmpq 与 vmap_extractor，再回到构建目录继续。适合遇到 CXX 链接失败的实战排错。"
source: "生猛大蝦 (https://yjyj.net)"
---

# 记录一下,编译mangosone时出现的小问题

> 来源：[生猛大蝦 (yjyj.net)](https://yjyj.net/learn/4695.html) · 作者：小 虾 · 发布时间：2014-07-20

## 30 秒核心看点 (TL;DR)

- vmapextractor 链接失败，核心是缺少 libmpq 依赖，不是单纯编译器坏了。
- 可先试编译参数 -DACE_USE_EXTERNAL=1，走外部依赖方案更省事。
- 若仍报错，就手动编译 dep/libmpq 和 contrib/vmap_extractor，再回到 build 目录继续。

错误提示: 

```
Linking CXX executable vmapextractor
/usr/bin/ld: cannot find -lmpq
collect2: ld returned 1 exit status
make[2]: *** [vmapextract/vmapextractor] Error 1
make[1]: *** [vmapextract/CMakeFiles/vmapextractor.dir/all] Error 2
make: *** [all] Error 2
```

 


哎呀真是蛋疼...
还好小道我以前练过!

两种解决办法:
0. 编译参数中加入(详细见mangos官方wiki):  

```
-DACE_USE_EXTERNAL=1
```

 

1.跟哥一起做: 

```
进入 dep/libmpq 这个目录
./autogen.sh
./configure
make
找到 contrib/vmap_extractor
cmake
make
```

 

根据自己情况做完上面某步之后,在进入obj或者bulid目录 就可以愉快的继续啦~

## 生猛大蝦编辑部 · 背景与实操延伸

这篇记录虽然短，但很典型：编译失败往往不是“代码坏了”，而是依赖库、链接路径或构建参数没对上。像 vmapextractor 这种报错，先看缺的是哪个库，再判断是走外部依赖配置，还是补齐本地库并重新生成构建文件。实操里最怕的是只反复 make，不回头检查依赖树；真正省时间的办法，是先定位缺库，再按模块逐层修复。

## 延伸问答与排错指南 (FAQ)

### 编译 mangosone 时提示 cannot find -lmpq 怎么办？
这类报错通常表示链接阶段找不到 mpq 库文件。优先检查是否按项目要求启用了外部依赖参数；如果不行，就进入 dep/libmpq 目录先执行 autogen.sh、configure、make，再到 contrib/vmap_extractor 重新 cmake 和 make。

### -DACE_USE_EXTERNAL=1 这个参数有什么作用？
它的作用是让编译过程优先使用外部依赖配置，避免某些库在项目内部路径里找不到。对于本文这种 vmapextractor 链接失败场景，这是最省事的第一步，适合先尝试。

### 手动编译 libmpq 后还要做什么？
编译完 dep/libmpq 后，还要到 contrib/vmap_extractor 目录重新生成并编译相关目标，然后回到 obj 或 build 目录继续整体构建。关键是让链接器能找到正确的 mpq 库路径。

---
更多 Linux 运维、WordPress 性能优化、前端工程化、Shopify 独立站与极客折腾指南：[生猛大蝦全站文章归档 (https://yjyj.net/archive)](https://yjyj.net/archive)
