从零开始构建向量数据库:Milvus 的源码编译安装(一)
在知乎上新开了关于“向量数据库”内容的专栏[1],本文将详细介绍如何在x和ARM架构的Linux系统上编译安装开源项目Milvus,这个项目由Linux Foundation AI & Data基金会支持,常与Weaviate和Elasticsearch相提并论[2][3]。 由于Milvus主要在GitHub进行开发,中文网络中关于编译安装的易安卓源码1000例教程很少,且大多是过时的1.x版本资料,而Milvus的版本迭代迅速,目前主要提供Docker容器安装,本地开发者或追求透明度的开发者可能会觉得不够友好。本文将从头开始,逐步引导你进行编译安装。前置准备
在开始前,需要确保操作系统、开发环境和必要的依赖已经准备妥当。Linux作为主力生产环境,本文将重点介绍在Ubuntu上编译。macOS和Windows上的步骤类似,但这里主要针对Linux。操作系统
推荐使用Ubuntu,无论是服务器、容器基础镜像,还是个人笔记本。具体配置和安装细节可以参考我在其他文章中介绍的《笔记本上搭建Linux学习环境》[6]。开发环境
Milvus主要使用Golang编写,同时包含C++代码。确保Golang和C++环境可用,参考《搭建Golang开发环境》[8],并注意Milvus官方推荐的版本。源码获取
获取Milvus源码有两种方式:Git Clone或下载压缩包,其中Git Clone可能需要借助国内镜像加速。具体步骤包括设置代码仓库的网页源码查找上游,确保代码同步。编译基础依赖
项目依赖OpenBLAS加速向量计算,详细安装步骤在《走进向量计算:OpenBLAS编译》[]中有详述。准备构建依赖:cmake
确保cmake版本至少为3.,Ubuntu .需手动安装,而Ubuntu .可直接使用apt。不同版本可能有差异,注意官方文档推荐的版本。额外依赖:clang-format和clang-tidy
项目代码中需要clang-format和clang-tidy,Ubuntu .和.的安装方式各有不同,务必安装正确版本以保持和官方构建一致。编译 Milvus
切换到 Milvus 代码目录,执行make命令编译。整个过程可能耗时,但完成后将在./bin/目录下找到可执行文件。总结
本文详细介绍了在Ubuntu .和.环境中编译安装Milvus的步骤,包括操作系统、开发环境和依赖的安装。后续文章将深入探讨容器镜像构建优化以及在MacOS上的安装指南。 期待你的反馈,如果觉得有用,请点赞和分享。如有任何问题或需要更新,请关注后续内容更新,感谢支持!C语言中函数的作用
C语言中的函数的作用是可以将一段经常需要使用的代码封装起来,在需要使用时可以直接调用。示例:
语言的函数定义和函数声明
#include<stdio.h>
//使用函数前,需要在main函数前对使用的函数进行声明
int getMax(int, int);
void main() {
int t=getMax(, );
printf("%d\n", t);
getchar();
}
int getMax(int a, int b) {
if (a > b) {
return a;
}
else {
return b;
}
}
扩展资料
scanf 函数
函数原型:int scanf(char *format [,argument,...])
功能:从标准输入设备(一般指键盘)实现格式化输入
返回值:成功返回读入的数据项个数
函数参数:format 格式化字符串
argument 输入数据项的地址列表
常用格式类型参考printf函数的个格式类型
用法举例:
从标准输入设备中输入一个整数到整形变量a中,输入一个浮点数到浮点型变量b中
int a=0;
float b=0;
scanf("%d%f",&a,&b);
上面程序执行后,从键盘输入: .6 ,装修 行业 源码程序将 赋值给变量a, .6赋值给变量b 。
win位下载中文乱码
win下载中文乱码(win7下载文件乱码)前言
初学者在Windows平台上进行C/C 在发语言(中文)程序时,有时会遇到编译报错、控制台运行时显示中文乱码的问题。
本文描述并分析了此类问题的原因,然后给出了解决方案。
本共享内容目录如下:
基本概念(字符集、字符编码、代码页面)GBK、UTF-8)
问题描述(例源码、编译报错、中文乱码)
原因分析(编码环节简介,原因分析)
解决方案(解决方案、编译错误解决方案、中文乱码解决方案)
结束语
1. 基本概念本文将涉及以下基本概念:
1.1 Charset(字符集)Charset(字符集):是系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括国家文字、标点符号、图形符号、数字等。字符是各种文字和符号的总称,包括国家文字、标点符号、图形符号、数字等。常见的字符集包括:ASCII字符集、Unicode字符集等。
计算机要准确处理各种字符集文字,需要编码字符,使计算机能够识别和存储各种文字。
1.2 Character Encoding(字符编码)Character Encoding(字符编码)用于为指定集合中某一对象(如电脉冲、比特模式等),逃生立场 源码以便文本在计算机中存储和通过通信网络的传递。字符编码是将符号转换为计算机可接受的数字系统。常见例子:将拉丁字母表编码成ASCII。
注:术语字符编码(Character Encoding)、字符映射(Character Map)或者代码页(CodePage),同义概念往往是历史上的,即字符表(repertoire)如何将中间的字符编码的流(stream of code units)–通常每个字符对应单个码元。
1.3 CodePage(代码页)CodePage(代码页)它也被称为字符编码的别名内码表,是特定语言字符集的表。
1.3 CodePage(代码页)CodePage(代码页)它也被称为字符编码的别名
内码表,是特定语言字符集的表。
OEM(IBM PC)代码页:指计算机的BIOS支持的字符集编码。最具代表性的是"代码页(IBM PC或MS-DOS )"。
Windows(ANSI)代码页:微软定义了一系列支持不同语言字符集的代码页支持不同语言字符集的代码页。最具代表性的是代码页WINDOWS-(实现了ISO--1)。注:Windows代码页面最初是基础ANSI草案实现了,草案最终成为ISO -1。这是Windows代码页被称为ANSI的缘由。本文涉及的两个重要代码页面介绍如下:代码页
:代码页面对应GBK编码。既是OEM代码页
,也是ANSI代码页。代码页:代码页面对应
UTF-8编码。Windows平台上的GUI程序使用
ANSI代码页,使用控制台程序OEM代码页(以便向后兼容)。
在Windows系统中的命令行窗口可以通过
chcp命令
显示当前代码页(如Windows 7 中文操作系统默认代码页为):C:\\> chcp 活动代码页:也可以通过chcp命令将具体的整数参数(代码页数值)带到当前的代码页(如临时修改为UTF-8对应的):C:\\> chcp Active code page:
1.4 GBK(汉字内码扩展规范)GBK(英文全称:Chinese Internal Code Extension Specification,中文全称:扩展汉字内码规范)是对GB-扩展,即代码页扩展(以前代码页和
GB-一模一样),最早实现Windows 简体中文版。GBK总编码范围为
0x~0xFEFE,首字节在0x~0xFE
尾字节在之间0x~0xFE之间,剔除
xx7F
一条线。c 传奇源码GBK共有个汉字和图形符号,包括个汉字(包括部首和构件)和个图形符号。GBK共有个汉字和图形符号,包括个汉字(包括部首和构件)和个图形符号。后续的国家标准GB技术上兼容GBK。注:微软Windows安排给GBK代码页是,所以编码格式WINDOWS-其实就是GBK。
1.5 UTF-8UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode可变长度字符编码。它可以使用一到四个字节Unicode
编码字符集中的所有有效编码点,属于Unicode
标准的一部分。自年以来UTF-8它一直是互联网上使用最广泛的编码方法。2. 问题描述初学者在Windows平台上进行C/C 在发语言(中文)程序编程时,有时会遇到编译报错、控制台执行时显示中文乱码的问题。
2.0 示例源码
C语言源代码文件(功能:中英文信息从控制台显示。)#include int main(void){ printf(" \");printf(" Hello, C语言开发者! \");printf(" \");return 0;}2.1 编译报错
第一类问题是:编译时发现错误,错误信息如下:
hello.c: In function 'main':hello.c:6:: error: converting to execution character set: Illegal byte sequenceprintf(" Hello, C语言开发者! \");^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2.2 中文乱码第二类问题是以通过编译顺利生成,但可执行文件在Windows控制台运行时显示中文乱码,如下图示:控制台显示中文乱码1或:
控制台显示中文乱码. 原因分析Windows平台C/C 语言(中文)程序编译报错,控制台执行时显示中文乱码一般是编码不一致造成的。3.1 编码链接简介首先,我们来看看 Windows 一个平台开发运行C/C 语言程序的编码环节主要涉及哪些?C语言开发全过程涉及编码环节
链接1。保存源代码时的字符编码
描述:指保存源代码文件中编辑器使用的字符编码。默认编码:Windows默认情况下,台上Windows本地编码,即WINDOWS-代码页,也就是GBK编码。默认编码:Windows默认情况下,台上Windows本地编码,即WINDOWS-代码页,也就是GBK编码。编码设置:源文件保存代码可以通过编辑器设置更改,如果保存为
UTF-8编码
。编译过程中的输入文件(源文件)字符编码描述:GCC用于编译输入源代码文件分析的字符编码。默认:GCC编译编译时默认输入文件UTF-8编码解析的。编码设置:可通过设置编译器选项-finput-charset=指定编编码来指定编译器输入的源文件。示例-finput-charset=GBK
三、编译器编译的输出文件(可执行文件)字符编码描述:GCC用于编译输出文件(可执行文件)的字符编码。默认:GCC默认为编译器UTF-8编码。编码设置:GCC可设置编译器-fexec-charset=选项指定编译器显示输出执行文件的编码。示例:-fexec-charset=GBK四、控制台使用的字符编码描述:显示控制台使用的代码。默认:Windows默认使用平台控制台WINDOWS-代码页(即GBK编码);Linux默认使用控制台UTF-8编码。
编码设置:Windows可通过平台注册表编辑器指定控制台显示输出执行文件的编码。3.2 原因分析
Windows平台C/C 语言(中文)程序编译报错,控制台执行时显示中文乱码一般是编码不一致造成的。原因分析
3.2.1 分析编译报错原因从上图可以清楚地看出,编译报错的原因是环节一与环节二由于两码不一致(如下)造成的:(一)上图1与4的组合(源文件保存为UTF-8编码
,但GCC编译器设置输入文件-源文件GBK编码解析)(2)上图2与3的组合(源文件保存为GBK编码
,但GCC编译器设置输入文件-源文件UTF-8编码解析)
3.2.2 中文乱码原因分析从上图可以清楚地看出,中文乱码的原因是环节三与环节四由于两码不一致(如下)造成的:(一)上图5和8组合
(GCC编译器对输出执行文件设置的是UTF-8编码,但Windows控制台是GBK编码)(二)上图中的6与7的组合
(GCC编译器对输出执行文件设置的是GBK编码
,但Windows控制台是UTF-8编码)
4. 解决方法
4.1 解决思路
通过上述原因分析,已经发现了编译报错和中文乱码的问题根源所在:前后环节的编码不一致造成。
既然问题根源找到了,那么解决思路也就迎刃而解了(如下图示):解决思路一、在环节一和环节二之间保持两者编码的一致性(1和3组合
,或2和4组合)进而解决编译报错问题;二、在环节三和环节四之间保持两者编码的一致性(5和7组合
,或6和8组合)进而解决中文乱码问题。
4.2 编译报错解决针对编译报错的两种情形(1和4组合、2和3组合)具体解决办法是:4.2.1 方法一(1和3组合)修改源文件编码为UTF-8编码,以跟GCC编译器对输入文件-源文件默认UTF-8编码解析保持一致。修改源文件编码为UTF-8编码的具体步骤如下:修改源文件编码为UTF-8编码Step1:通过执行Code::Blocks软件的菜单栏设置下的编辑器子菜单项,进入“编辑器配置”窗口。Step2:点击左侧常规设置按钮(上图标号1处),继续点击右侧的编码设置选项卡(上图标号2处)Step3:在使用编码右侧的下拉框中选择UTF-8(
上图标号3处)Step4:选中
设为默认的编码方式(忽略C::B的自动检测)(上图标号4处)Step5:点击右下角的
确定按钮,完成编辑器编码设置。Step6
:然后将编辑器内的源文件稍加修改重新保存(保险起见,可以重启code::Blocks软件以确保源文件编码生效)。
4.2.2 方法二(2和4组合)修改源文件编码为GBK编码,将GCC编译器对输入文件-源文件设置为是按GBK编码解析。一、修改源文件编码为GBK编码的具体步骤与上面类似(在下拉框中把UTF-8改为WINDOWS-即可)。修改源文件编码为GBK编码二、修改编译器对输入源文件的解析编码为GBK编码的具体步骤如下:修改编译器输入编码设置Step1:通过执行Code::Blocks软件的菜单栏设置下的编译器子菜单项,进入“编译器设置”窗口。Step2:点击左侧全局编译器设置
按钮(
上图标号1处),继续点击右侧的编译器设置选项卡(
上图标号2处)Step3
:再继续点击下方的其他编译器设置
选项卡(上图标号3处)Step4:在下面的文本框中直接输入-finput-charset=GBK(上图标号4处)Step5
:点击右下角的确定
按钮,完成编译器输入编码设置。
验证:经过前面两种方法的设置,完成编码一致性后,再次进行编译,就已经可以成功通过了(如下图示)。编译成功但显示乱码
但是你会发现程序运行在控制台时显示中文乱码了。此时再回想一下:源文件编码(GBK)+ 编译器输入设置编码(GBK) = 编译通过。但因为GCC编译器默认输出执行文件编码为UTF-8编码,同时Windows控制台默认是GBK编码
,所以此时程序运行在控制台显示中文乱码逻辑上是正常的。
4.3 中文乱码解决针对中文乱码的两种情形(5和8组合、6和7组合)具体解决办法是:4.3.1 解决方法一(6和8组合)设置GCC编译器对输出执行文件是GBK编码,跟Windows控制台默认GBK编码保持一致。修改编译器对输出执行文件编码为GBK编码的具体步骤如下:修改编译器输出编码设置Step1:通过执行Code::Blocks软件的菜单栏设置下的编译器子菜单项,进入“编译器设置”窗口。Step2:点击左侧全局编译器设置
按钮(
上图标号1处),继续点击右侧的编译器设置选项卡(上图标号2处)Step3:再继续点击下方的其他编译器设置
选项卡(上图标号3处)Step4
:在下面的文本框中直接输入-fexec-charset=GBK(上图标号4处)Step5:点击右下角的确定按钮,完成编译器输出编码设置。4.3.2 解决方法二(5和7组合)修改Windows控制台编码为UTF-8编码,以跟GCC编译器对输出执行文件默认UTF-8编码保持一致。修改Windows控制台编码为UTF-8编码的具体步骤如下:Step1:通过快捷键Win+R,弹出的运行窗口中,执行regedit命令,然后点击确定
按钮打开“注册表编辑器”窗口。运行regedit命令Step2:在“注册表编辑器”窗口中依次点击计算机(下图标号1)、HKEY_CURRENT_USER(下图标号2
)、Console(下图标号3)进入注册表编辑器查找
Step3:在右侧选中CodePage项,然后双击弹出“编辑 DWORD(位)值”窗口,依次选择
十进制(
下图标号1处)、把“数值数据”下的 修改为 (下图标号2处)。修改注册表项Step4:点击上图确定
按钮,完成修改(如下图示)。修改注册表完成Step5
:按快捷键F5进行刷新生效。
注1:如果要恢复原数值只需重复同样的步骤,把修改为即可。注2:上面方法面向所有的控制台(如:Windows默认CMD控制台、CodeBlocks控制台、DevCpp控制台、Git CMD控制台等)生效。
注3:如果只需针对特定控制台生效,可以在本步骤基础上,再往下一层,选中具体控制台(如C:_Develop_CodeBlocks_cb_console_runner.exe
),然后通过鼠标右键菜单新建一个DWORD(位)值,该数值名称设为CodePage,数值数据设为(十进制)。然后F5刷新即可生效。
验证:经过上面两种方法的设置,完成编码一致性后,再次在控制台运行软件时就已经是正常显示中英文了(如下图示):编译、运行显示正常注:本文虽是以Code::Blocks集成开发环境为例进行讲解,但其原理针对Windows平台上C语言程序运行的其他控制台(如Windows默认CMD控制台、Git CMD控制台等)也是适用的。结束语相信各位 C 语言初学者们阅读完本文后,应该已经对 Windows 平台C语言(中文)程序在编译时报错的原因及解决办法、在控制台运行时显示中文乱码的原因及解决办法已经有了比较基本的了解掌握,此类问题将不再困扰,接下来就可以愉快地学习其他 C 语言知识了。希望本文能对您有所帮助!喜欢的话就点个赞加关注支持一下哈:)开发一个c语言程序要经过哪四个步骤
开发一个C语言程序需要经过的四个步骤:编辑、编译、连接、运行。C语言程序可以使用在任意架构的处理器上,只要那种架构的处理器具有对应的C语言编译器和库,然后将C源代码编译、连接成目标二进制文件之后即可运行。
1、预处理:输入源程序并保存(.C文件)。
2、编译:将源程序翻译为目标文件(.OBJ文件)。
3、链接:将目标文件生成可执行文件(.EXE文件)。
4、运行:执行.EXE文件,得到运行结果。
/iknow-pic.cdn.bcebos.com/fcfd9ca7bcb0adb"target="_blank"title=""class="ikqb_img_alink">/iknow-pic.cdn.bcebos.com/fcfd9ca7bcb0adb?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_%2Ch_%2Climit_1%2Fquality%2Cq_%2Fformat%2Cf_auto"esrc="/fcfd9ca7bcb0adb"/>
扩展资料:
C语言代码变为程序的几个阶段:
1、首先是源代码文件test.c和相关的头文件,如stdio.h等被预处理器cpp预处理成一个.i文件。经过预编译后的.i文件不包含任何宏定义,因为所有的宏已经被展开,并且包含的文件也已经被插入到.i文件中。
2、编译过程就是把预处理完的文件进行一系列的词法分析、语法分析、语义分析以及优化后产生相应的汇编代码文件,这个过程往往是我们所说的整个程序的构建的核心部分,也是最复杂的部分之一。
3、汇编器不直接输出可执行文件而是输出一个目标文件,汇编器可以调用ld产生一个能够运行的可执行程序。即需要将一大堆文件链接起来才可以得到“a.out”,即最终的可执行文件。
4、在链接过程中,对其他定义在目标文件中的函数调用的指令需要被重新调整,对实用其他定义在其他目标文件的变量来说,也存在同样问题。
/baike.baidu.com/item/c语言/?fr=aladdin"target="_blank"title="百度百科-c语言">百度百科-c语言
2024-12-01 00:06
2024-11-30 23:49
2024-11-30 23:31
2024-11-30 23:06
2024-11-30 22:44