> For the complete documentation index, see [llms.txt](https://smallso.gitbook.io/vector/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://smallso.gitbook.io/vector/build.md).

# 构建

本页将介绍如何从 Source 构建二进制库文件或得到预构建的 Release 二进制库文件

### 从 Source 构建

{% hint style="info" %}
除非必要，否则建议您尝试使用经过优化与测试的预构建二进制共享库文件或将源文件加入您的项目并参与构建，这可能会有利于Vector Helper 的稳定性与性能，但不是绝对的。
{% endhint %}

以下将介绍使用 Linux 或 Windows 从 Source 构建 Vector Helper 二进制库文件。

{% tabs %}
{% tab title="Linux" %}

> 以下过程使用 Debian 9.5 GNU/Linux x86\_64 演示

#### 检查清单

在构建 Vector Helper 二进制库文件之前，首先检查兼容性与依赖项清单。

* 已安装 GNU Compiler Collection（GCC）4.8 或更高版本
* 已安装 glibc 2.12 或更高版本
* 已安装 GNU Make 3.8.2 或更高版本
* 已安装 git

#### 从 Github 拉取

从 github 上拉取并克隆 `SmallSO/Vector` 仓库到 `vector_helper` 目录。

{% code title="Shell" %}

```bash
$ git clone https://github.com/SmallSO/Vector vector_helper
$ cd vector_helper
```

{% endcode %}

#### 构建

在 `vector_helper` 目录下执行预置的 Makefile 文件以自动构建 Vector Helper 共享库和静态库。

{% code title="Shell" %}

```bash
$ make
$ cd bin
$ ls | grep lib
```

{% endcode %}

当以上 Shell 命令执行成功后，`ls` 命令通常应列出如下文件：

* libvector.a
* libvector.so

其中，`libvector.a` 为 Vector Helper 静态库；`libvector.so` 为 Vector Helper 共享库。

{% hint style="warning" %}
构建的二进制共享库库文件与静态库是基于您当前构建环境的体系结构的，因此您不能将其移动至与当前环境体系结构不同的环境中运行，应该在新的环境中重新构建或使用预构建二进制共享库或静态库文件。
{% endhint %}

{% hint style="success" %}
到此，在 Linux 平台上的构建工作已完成。
{% endhint %}
{% endtab %}

{% tab title="Windows" %}

> 以下过程使用 Microsoft Windows 10 1803 x86\_64 演示

#### 检查清单

在构建 Vector Helper 二进制库文件之前，首先检查兼容性与依赖项清单。

* 已安装 Microsoft Visual Studio 2010 或更高版本
* 已安装 Microsoft Visual C++ 2010 或更高版本
* 已安装 Microsoft Windows SDK
* 已安装 Git for Windows

#### 创建 Microsoft Visual Studio 项目

您需要通过 Microsoft Visual Studio 来编译生成 Vector Helper 二进制库文件。

1. 启动 Microsoft Visual Studio
2. 创建 `VC++ / Windows Desktop / DLL` 项目
3. 打开解决方案资源管理器，找到并选择上一步创建的 DLL 项目（以下简称**当前项目**）
4. 在当前项目中，找到并移除 `stdafx.h` `targetver.h` `stdafx.cpp` `[项目名称].cpp`
5. 在当前项目中，找到并重命名 `dllmain.cpp` 为 `dllmain.c`
6. 在当前项目中，找到并打开 `dllmain.c`，之后在 `dllmain.c` 文件中查找并替换 `include "stdafx.h"`为 `#include "windows.h"`
7. 在解决方案资源管理器中，鼠标右键选择当前项目，之后选择`属性`
8. 在上一步打开的`属性`窗口的左侧栏中，找到并展开`C/C++`，之后选择`预编译头`，之后在右侧呈现的选项列表中找到并修改选项`预编译头`的值为`不使用预编译头`，再找到并修改选项`预编译头文件`的值为空，最后在`属性`窗口右下角找到并单击`应用`后关闭`属性`窗口
9. 在键盘上找到并一同按下快捷键 `Ctrl + Shift + S` 以保存所有显式更改
10. 在解决方案资源管理器中，鼠标右键选择当前项目，之后选择`在文件资源管理器中打开文件夹`
11. 在上一步打开的文件资源管理器窗口中，鼠标右键空白区域，在弹出的右键快捷菜单中找到并展开子菜单`新建`，然后再找到并选择`文件夹`，最后将新建文件夹命名为 `vector_helper`（该步骤可以忽略，因为这一目录在之后主要步骤中会被自动创建）
12. 记录上一步打开的文件资源管理器窗口对应的目录路径（之后主要步骤中简称**当前项目根目录**），以备后续使用。

#### 从 Github 拉取

从 github 上拉取并克隆 `SmallSO/Vector` 仓库到当前项目根目录内的 `vector_helper` 目录。

{% code title="命令提示符" %}

```bash
cd [当前项目根目录]
git clone https://github.com/SmallSO/Vector vector_helper
cd vector_helper
```

{% endcode %}

#### 将源文件加入 Microsoft Visual Studio 项目

您需要将当前项目根目录内的 `vector_helper` 目录中的一些源文件加入到当前项目中，以便让这些文件参与项目生成，以下文件路径从 `vector_helper`目录内列出。

* src/vector\_helper.h
* src/vector\_helper.c
* src/vc/vector\_helper.def
* 打开解决方案资源管理器，找到并鼠标右键选择当前项目，之后在弹出的快捷菜单中找到并展开`添加`，之后在弹出的子菜单中找到并选择`现有项`
* 在弹出的文件资源管理器浏览窗口中切换到当前项目根目录，之后找到并进入 `vector_helper` 目录，之后找到并逐一或一并选择上述路径对应的文件，最后在文件资源管理器浏览窗口的右下角找到并选择`确定`
* 在解决方案资源管理器中，找到并鼠标右键选择当前项目，之后在弹出的快捷菜单中找到并选择`属性`
* 在上一步打开的项目属性窗口左上方的配置选择列表中，找到并选择`所有配置`，之后在平行向右的平台选择列表中，找到并选择`所有平台`。接着在属性窗口的左侧栏中，找到并展开`链接器`，之后找到并选择`输入`，然后在右侧呈现的选项列表中找到并修改选项`模块定义文件`的值为 `vector_helper/src/vc/vector_helper.def`，最后在项目属性窗口右下角找到并单击`应用`后关闭项目属性窗口

{% hint style="warning" %}
以上项目配置所生成的 Vector Helper 二进制库文件依赖 VC 共享运行库，如需要在未安装 VC 共享运行库的环境中使用，请参照如下方式修改项目属性：

1. 打开当前项目属性
2. 在左侧栏中找到并展开 C/C++，之后找到并选择“代码生成”
3. 切换当前项目属性配置为 Debug，平台为“所有平台”
4. 在右侧呈现的选项列表中找到并修改选项“运行库”的值为“多线程调试 (/MTd)”
5. 在当前项目属性窗口右下角找到并单击“应用”
6. 切换当前项目属性配置为 Release，平台为“所有平台”
7. 在右侧呈现的选项列表中找到并修改选项“运行库”的值为“多线程 (/MT)”
8. 在当前项目属性窗口右下角找到并单击“应用”

以上项目配置所生成的 Vector Helper 二进制库文件的导出函数调用约定为 \_\_cdecl 方式，如需修改为较为常用的 \_\_stdcall 方式，请参照如下方式修改项目属性：

1. 打开当前项目属性
2. 切换当前项目属性配置为“全部配置”，平台为“所有平台”
3. 在左侧栏中找到并展开 C/C++，之后找到并选择“高级”
4. 在右侧呈现的选项列表中找到并修改选项“调用约定”的值为“\_\_stdcall (/Gz)”
5. 在当前项目属性窗口右下角找到并单击“应用”
   {% endhint %}

#### 使用 Microsoft Visual Studio 构建

使用当前项目配置自动构建 Vector Helper 二进制库文件

1. 打开解决方案资源管理器，找到并鼠标右键选择当前项目，之后在弹出的快捷菜单中找到并选择`生成`
2. 根据 Microsoft Visual Studio 输出窗口的内容，查找生成的 Vector Helper 二进制库文件所在路径

{% hint style="success" %}
到此，在 Windows 平台上的构建工作已完成。
{% endhint %}
{% endtab %}
{% endtabs %}

### 使用预构建的 Release 库

我们已为您准备了在主流平台上可运行的预构建 ~~Debug 和~~ Release 版本的二进制库文件，目前已为这些平台创建了预构建的二进制库文件，其中包括共享库和静态库：

* GNU/Linux x86\_64
* GNU/Linux ARMHF
* Microsoft Windows 7 或更高版本 x86
* Microsoft Windows 7 或更高版本 x86\_64
* Microsoft Windows XP x86
* Microsoft Windows XP SP3 x86\_64

若您在后端项目中使用 Vector Helper，通常您的服务器系统平台是基于 `x86_64` 架构的，因此您可以根据系统种类选择为 `GNU/Linux x86_64` 或 `Microsoft Windows 7 或更高版本 x86_64` 预构建的二进制库。

若您在客户端项目中使用 Vector Helper，通常您的软件是基于 `x86` 或 `x86_64` 的架构的，因此您可以根据目标体系结构选择为 `Microsoft Windows 7 或更高版本 x86` 或 `Microsoft Windows 7 或更高版本 x86_64` 预构建的二进制库。

若您在 IoT 设备中使用 Vector Helper，通常您的 IoT 系统平台是基于 ARMHF 架构的，因此您可以根据系统种类选择为 `GNU/Linux ARMHF` 预构建的二进制库或从 Source 重新构建适用于当前 IoT 系统平台的二进制库文件。

这些预构建的二进制库文件位于 bin/release 目录内，文件的命名规范如下：

* ~~Debug 版本的共享库和静态库，以 libvector\_d 命名~~
* Release 版本的共享库和静态库，以 libvector 命名
* GNU/Linux 共享二进制库文件扩展名为 \*.so
* GNU/Linux 静态库文件扩展名为 \*.a
* Microsoft Windows 共享二进制库文件扩展名为 \*.lib
* Microsoft Windows 静态库文件扩展名为 \*.lib
* 兼容二进制库文件与静态库文件，会在文件名尾部追加“\_\[兼容平台]”

文件路径如下：

| 体系结构                              | 目录路径                  | 库类型 |
| --------------------------------- | --------------------- | --- |
| GNU/Linux x86\_64                 | bin\release\x64       | 原生  |
| GNU/Linux ARMHF                   | bin\release\arm       | 原生  |
| Microsoft Windows 7 或更高版本 x86     | bin\release\x86       | 原生  |
| Microsoft Windows 7 或更高版本 x86\_64 | bin\release\x64       | 原生  |
| Microsoft Windows XP x86          | bin\release\x86\winxp | 兼容  |
| Microsoft Windows XP SP3 x86\_64  | bin\release\x64\winxp | 兼容  |

{% hint style="warning" %}
从 Vector Helper 1.0.2 版本开始，将不再提供 Debug 版本的预构建二进制库文件。
{% endhint %}
