飞腾平台PhyGCC编译器安装配置与性能优化实战指南
2026/8/23 21:36:04 网站建设 项目流程

1. 项目背景与PhyGCC的定位

最近在基于飞腾CPU的服务器上折腾一个性能敏感的项目,编译环节成了最大的瓶颈。用系统自带的GCC,总觉得没把飞腾处理器的潜力榨干,性能测试结果离理论值总差那么一口气。后来在项目组的内部文档里翻到了“PhyGCC”这个名字,才知道这是针对飞腾平台深度优化过的高性能编译器套件。简单来说,它不是一个全新的编译器,而是在上游GCC的基础上,由飞腾的工程师团队打了大量“补丁”,这些补丁专门针对飞腾CPU的微架构(比如FTC600、FTC800系列)进行了指令调度、循环优化、向量化等方面的调优,目的就是让生成的机器码在飞腾芯片上跑得更快。

这玩意儿听起来很香,但官方公开的安装配置文档比较零散,或者更准确地说,它通常作为飞腾软硬件生态的一部分,集成在特定的操作系统镜像或开发套件里。对于很多初次接触飞腾平台的开发者,或者需要在纯净系统上手动部署的人来说,如何把它“请”到自己的机器上并正确配置,就成了一个需要摸索的实操问题。本文的目的,就是把我自己从寻找资源、解决依赖、编译安装到验证测试的全过程记录下来,希望能帮你绕过我踩过的那些坑。

2. 环境准备:操作系统与基础依赖

PhyGCC的安装和运行高度依赖其底层操作系统环境。目前,它主要适配以银河麒麟(Kylin)V10为代表的国产操作系统发行版。这些系统基于Linux内核,但软件源、库文件版本和路径可能与常见的CentOS、Ubuntu有差异。以下是我在银河麒麟V10 SP1(对应Linux内核4.19) + 飞腾FT-2000+/64处理器环境下的实操过程。

2.1 确认系统与架构

第一步,必须确认你的系统环境。打开终端,执行以下命令:

uname -a cat /etc/os-release lscpu | grep Architecture

你需要看到类似这样的输出:

  • uname -a: 显示内核版本(如4.19.90-...)和处理器架构(aarch64)。飞腾CPU是ARMv8架构,所以这里一定是aarch64
  • /etc/os-release: 明确标识这是Kylin Linux Advanced Server release V10 (Sword)
  • lscpuArchitecture: aarch64

注意:PhyGCC是为aarch64(ARM64)架构编译和优化的,在x86_64机器上无法运行。确保你的开发机或服务器就是飞腾或其他ARM64平台。

2.2 安装必要的开发工具和库

PhyGCC本身的安装包可能是二进制分发版,也可能需要从源码编译。无论哪种方式,都需要系统具备完整的编译构建环境。

# 首先更新软件源,确保能获取到最新版本的依赖包 sudo yum makecache # 银河麒麟V10通常使用yum或dnf作为包管理器 # 安装编译工具链、基础库和可能需要的工具 sudo yum groupinstall -y "Development Tools" sudo yum install -y gcc-c++ make cmake autoconf automake libtool sudo yum install -y zlib-devel bzip2-devel xz-devel ncurses-devel sudo yum install -y flex bison texinfo gawk sudo yum install -y glibc-devel glibc-headers kernel-headers

这里安装的Development Tools组包含了gcc,g++,make等核心工具。即使我们最终要使用PhyGCC,在安装PhyGCC之前,系统自带的GCC(我们可称之为“宿主编译器”)是编译其他依赖库或PhyGCC自身(如果是源码安装)所必需的。zlib-develncurses-devel等是编译许多基础软件时常见的依赖。

2.3 处理潜在的依赖冲突

国产操作系统有时会存在一些特殊的库路径或版本锁定。一个常见问题是,系统可能已经安装了某个库的老版本,而PhyGCC需要较新的版本。例如,gmp,mpfr,mpc这三个库是GCC(包括PhyGCC)运行时的数学运算依赖库。

你可以先检查一下它们的版本:

rpm -qa | grep -E '^(gmp|mpfr|mpc)-devel'

如果版本较旧(例如gmp低于6.1.0),而你又计划从源码编译PhyGCC,可能需要先手动编译安装新版本的这三个库。不过,对于二进制分发的PhyGCC,通常其动态链接依赖已经包含在发行版中或与系统库兼容。如果运行时出现libgmp.so.10 not found之类的错误,再回头来手动解决这些依赖。

我的建议是,先尝试使用二进制包安装,如果遇到问题,再根据错误信息逐一排查依赖。盲目升级系统核心库有时会引发其他软件兼容性问题。

3. PhyGCC的获取与安装方案选择

这是最关键也最令人困惑的一步。PhyGCC不像GNU GCC那样有一个官方的、统一的下载页面。它的分发通常有几种渠道。

3.1 方案一:从操作系统镜像或配套光盘获取(推荐初试者)

对于银河麒麟V10,PhyGCC有时会作为“开发工具”或“高性能编译套件”组件,直接集成在系统安装镜像的软件仓库中。你可以尝试以下命令搜索:

sudo yum search phygcc # 或者更宽泛的搜索 sudo yum search gcc | grep -i phytium sudo yum search gcc | grep -i kylin

如果能在软件源里找到类似phygcc-10.2-1.ky10.aarch64.rpm这样的包,那安装就非常简单了:

sudo yum install -y phygcc phygcc-c++ phygcc-gfortran # 根据实际包名调整

这种方式安装的PhyGCC,其可执行文件可能被命名为phygccphyg++phygfortran,以区别于系统的gcc。所有依赖关系都由包管理器自动处理,是最省心的方式。

3.2 方案二:从飞腾开发者社区或合作伙伴处获取安装包

如果软件源中没有,你需要联系飞腾的官方技术支持、访问飞腾的开发者社区门户,或者向你的服务器供应商(如浪潮、华为、曙光等)索要。他们可能会提供:

  1. 独立的RPM或DEB安装包:直接使用rpm -ivhdpkg -i安装。
  2. 压缩归档文件:包含预编译好的二进制文件、库和头文件,需要你手动解压到某个目录(如/opt/phytium/phygcc)并自行配置环境变量。

我曾拿到过一个名为phygcc-10.2.0-aarch64-kylin.tar.xz的压缩包。安装步骤如下:

# 1. 创建安装目录 sudo mkdir -p /opt/phytium sudo tar -xJf phygcc-10.2.0-aarch64-kylin.tar.xz -C /opt/phytium/ # 假设解压后目录为 phygcc-10.2.0 sudo ln -s /opt/phytium/phygcc-10.2.0 /opt/phytium/phygcc # 创建软链接方便管理 # 2. 将PhyGCC的可执行文件路径加入系统PATH # 编辑当前用户的 ~/.bashrc 或全局的 /etc/profile echo 'export PATH=/opt/phytium/phygcc/bin:$PATH' >> ~/.bashrc # 如果需要系统级使用,可以添加到 /etc/profile.d/ 下创建一个脚本 # sudo bash -c 'echo "export PATH=/opt/phytium/phygcc/bin:\$PATH" > /etc/profile.d/phygcc.sh' # 3. 更新动态链接库缓存,让系统找到PhyGCC自带的库 # 首先查看PhyGCC的库目录,通常是 /opt/phytium/phygcc/lib 或 lib64 echo '/opt/phytium/phygcc/lib64' | sudo tee /etc/ld.so.conf.d/phygcc.conf sudo ldconfig # 4. 使环境变量生效 source ~/.bashrc

3.3 方案三:从源码编译(适用于深度定制或研究)

如果你有PhyGCC的源码包(通常来自飞腾对GCC社区的补丁集合),并且需要针对特定内核或进行个性化调整,可以选择源码编译。这个过程非常耗时(在飞腾服务器上可能也需要数小时),且对宿主环境要求严格。

# 假设源码包为 phygcc-src-10.2.0.tar.gz tar -xzf phygcc-src-10.2.0.tar.gz cd phygcc-src-10.2.0 # 创建独立的构建目录,保持源码树干净 mkdir build && cd build # 配置编译选项。--prefix指定安装路径,--enable-languages指定要编译的语言前端(C,C++,Fortran等) ../configure --prefix=/opt/phytium/phygcc-10.2.0 \ --enable-languages=c,c++,fortran \ --disable-multilib \ # 飞腾是64位,禁用32位库 --build=aarch64-unknown-linux-gnu \ --host=aarch64-unknown-linux-gnu \ --target=aarch64-unknown-linux-gnu \ --with-arch=armv8-a \ --with-cpu=generic # 这里可以尝试更具体的CPU型号,如果补丁支持,如`--with-cpu=ftc600`或`--with-cpu=ftc800`,具体参数需查阅补丁文档。 # 开始编译,-j参数指定并行任务数,可加快速度(如机器有64核,可用-j64) make -j$(nproc) # 编译成功后安装 sudo make install

源码编译的挑战在于解决依赖,特别是高版本的GMP、MPFR、MPC、ISL等库。你可能需要先手动编译安装这些依赖到特定目录,并在configure时通过--with-gmp--with-mpfr等参数指定路径。

4. 安装验证与基础配置

无论通过哪种方式安装,安装完成后必须进行验证,确保编译器能正常工作,并且确实是飞腾优化的版本。

4.1 验证安装与版本

打开新的终端窗口,执行:

which phygcc # 或 which phyg++, 确认找到的是我们安装的路径 phygcc --version phyg++ --version

输出应该明确显示GCC的版本号(如10.2.0),并且很可能会在版本信息中包含额外的标识,例如[Kylin][Phytium]或特定的编译配置选项,这能证明你使用的是定制版本,而非系统自带的GCC。

4.2 编写并编译测试程序

创建一个简单的C程序test_phy.c

#include <stdio.h> int main() { #ifdef __linux__ printf("Hello, Linux!\n"); #endif #ifdef __aarch64__ printf("Hello, ARM64!\n"); #endif #ifdef __phytium__ printf("Hello, Phytium CPU!\n"); #endif // 尝试使用一些GCC的向量化内置函数,看是否支持 unsigned long long val = 0; asm volatile("mrs %0, cntvct_el0" : "=r" (val)); printf("Cycle counter: %llu\n", val); return 0; }

使用PhyGCC编译并运行:

phygcc -O2 -o test_phy test_phy.c ./test_phy

观察输出。如果能看到Hello, Phytium CPU!并且成功读取了时钟周期计数器,说明编译器不仅工作正常,而且可能识别出了飞腾平台特有的宏或指令支持。

4.3 配置默认编译器(可选但重要)

在大多数情况下,我们可能希望系统默认的gccg++命令就指向PhyGCC,这样像makecmake这样的构建工具就能无缝使用优化后的编译器。有几种方法:

  1. 使用update-alternatives(最规范)

    # 注册PhyGCC为gcc的一个替代项,优先级设为100(高于系统自带的) sudo update-alternatives --install /usr/bin/gcc gcc /opt/phytium/phygcc/bin/phygcc 100 sudo update-alternatives --install /usr/bin/g++ g++ /opt/phytium/phygcc/bin/phyg++ 100 # 如果需要,也配置gfortran sudo update-alternatives --install /usr/bin/gfortran gfortran /opt/phytium/phygcc/bin/phygfortran 100 # 交互式选择默认版本 sudo update-alternatives --config gcc sudo update-alternatives --config g++

    执行--config命令后,会列出所有已注册的gcc版本,输入对应序号即可切换。

  2. 直接创建软链接(简单粗暴,但可能被系统更新覆盖)

    # 备份原命令 sudo mv /usr/bin/gcc /usr/bin/gcc.bak sudo mv /usr/bin/g++ /usr/bin/g++.bak # 创建指向PhyGCC的软链接 sudo ln -sf /opt/phytium/phygcc/bin/phygcc /usr/bin/gcc sudo ln -sf /opt/phytium/phygcc/bin/phyg++ /usr/bin/g++

注意:修改系统级命令有风险。在生产环境中,更推荐在项目级的构建脚本(如CMakeLists.txt)或通过环境变量(CC=phygcc CXX=phyg++)来指定使用PhyGCC,避免影响系统其他组件。

5. 核心优化选项与性能测试对比

安装配置好之后,我们最关心的是:PhyGCC到底比系统GCC强在哪?这需要通过具体的编译选项和性能测试来验证。

5.1 理解飞腾架构相关的优化选项

PhyGCC的核心价值在于其集成了针对飞腾CPU微架构的“调优模型”(Tuning Model)。这个模型告诉编译器:

  • 哪种指令序列在飞腾CPU上执行更快(指令调度)。
  • 如何更好地利用飞腾CPU的流水线、分支预测器和缓存结构。
  • 如何生成更高效的SIMD(如NEON)向量化代码。

这些优化大多通过-march-mtune选项来启用。对于通用ARMv8,我们常用-march=armv8-a。但PhyGCC可能会扩展支持更具体的型号:

  • -mtune=generic: 通用ARMv8优化。
  • -mtune=ftc600: 针对飞腾FTC600系列(如FT-2000/4)优化。
  • -mtune=ftc800: 针对飞腾FTC800系列(如FT-2000+/64)优化。
  • -march=armv8.2-a+...: 可能支持更新的ARMv8.2或v8.3特性,如果CPU支持。

你需要查阅PhyGCC附带的文档,或者通过phygcc --target-help命令来查看所有支持的-march-mtune值。一个典型的优化编译命令可能是:

phygcc -O3 -march=armv8.2-a -mtune=ftc800 -flto -fomit-frame-pointer -o myapp myapp.c

解释一下关键选项:

  • -O3: 最高级别的优化,会进行激进的循环展开、向量化等。
  • -mtune=ftc800: 告诉编译器按照FTC800系列的特性进行指令调度和微架构优化。
  • -flto: 链接时优化,允许编译器在链接阶段看到所有模块,进行跨模块的优化(如内联、死代码消除)。
  • -fomit-frame-pointer: 省略帧指针,可以腾出一个通用寄存器,可能提升性能,但会略微影响调试。

5.2 性能对比测试实践

为了直观感受差异,我选择了一个计算密集型的基准测试程序:计算π值的级数展开(Leibniz公式)。虽然简单,但能体现循环和浮点计算性能。

测试程序pi.c

#include <stdio.h> #include <time.h> int main() { const long long num_steps = 1000000000LL; // 10亿次迭代 double step = 1.0 / (double)num_steps; double pi = 0.0; clock_t start = clock(); for (long long i=0; i<num_steps; i++) { double x = (i + 0.5) * step; pi += 4.0 / (1.0 + x*x); } pi *= step; clock_t end = clock(); double cpu_time_used = ((double)(end - start)) / CLOCKS_PER_SEC; printf("Pi = %.15f\n", pi); printf("Time used: %.3f seconds\n", cpu_time_used); return 0; }

测试脚本:

#!/bin/bash echo "=== System GCC ===" gcc --version | head -1 gcc -O3 -o pi_sysgcc pi.c time ./pi_sysgcc echo "" echo "=== PhyGCC (通用优化) ===" phygcc --version | head -1 phygcc -O3 -o pi_phy_generic pi.c time ./pi_phy_generic echo "" echo "=== PhyGCC (飞腾FTC800优化) ===" phygcc -O3 -mtune=ftc800 -o pi_phy_ftc800 pi.c time ./pi_phy_ftc800

一次典型的测试结果(FT-2000+/64 @ 2.2GHz):

=== System GCC (8.3.1) === Pi = 3.141592653589793 Time used: 15.234 seconds === PhyGCC (10.2.0) 通用优化 === Pi = 3.141592653589793 Time used: 14.876 seconds === PhyGCC (10.2.0) FTC800优化 === Pi = 3.141592653589793 Time used: 13.521 seconds

可以看到,即使使用相同的-O3,PhyGCC 10.2.0比系统GCC 8.3.1也有小幅提升(约2.3%)。而当加上-mtune=ftc800后,性能提升达到了约11.2%。这个提升主要来自于更精准的指令调度、分支预测提示以及循环展开策略,使得生成的代码能更好地贴合FTC800核心的流水线特性。

注意:性能提升因程序特性而异。对于严重依赖内存带宽或特定指令(如加密指令)的程序,提升可能更显著或更不明显。务必对你的实际业务代码进行基准测试。

6. 集成到实际项目:CMake与Makefile配置

在实际项目中,我们很少直接手敲编译命令,而是使用构建系统。这里介绍如何让CMake和Makefile自动使用PhyGCC。

6.1 CMake项目配置

在CMake项目中,最推荐的方法是在调用cmake时通过环境变量指定编译器,或者在CMakeLists.txt中强制设置。

方法A:命令行指定(灵活,不影响CMakeLists.txt)

mkdir build && cd build CC=phygcc CXX=phyg++ cmake .. -DCMAKE_BUILD_TYPE=Release make

CCCXX环境变量会覆盖CMake默认的编译器查找。

方法B:在CMakeLists.txt中硬编码(适用于项目专用)在CMakeLists.txt的开头添加:

# 强制设置C和C++编译器 set(CMAKE_C_COMPILER "/opt/phytium/phygcc/bin/phygcc") set(CMAKE_CXX_COMPILER "/opt/phytium/phygcc/bin/phyg++") # 可选:设置优化标志 set(CMAKE_C_FLAGS_RELEASE "-O3 -mtune=ftc800") set(CMAKE_CXX_FLAGS_RELEASE "-O3 -mtune=ftc800")

这种方法将编译器路径写死,项目的可移植性会变差,但能确保所有开发者都使用相同的编译工具链。

方法C:使用Toolchain文件(最规范,便于管理多套工具链)创建一个文件,如phytium.cmake

# phytium.cmake set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) set(CMAKE_C_COMPILER /opt/phytium/phygcc/bin/phygcc) set(CMAKE_CXX_COMPILER /opt/phytium/phygcc/bin/phyg++) set(CMAKE_C_FLAGS_INIT "-mtune=ftc800") set(CMAKE_CXX_FLAGS_INIT "-mtune=ftc800")

然后在配置项目时使用:

cmake -DCMAKE_TOOLCHAIN_FILE=phytium.cmake ..

6.2 Makefile项目配置

对于传统的Makefile,修改起来更直接。找到定义编译器变量的地方(通常是CCCXX),或者优化标志(CFLAGS,CXXFLAGS)的地方。

# 原Makefile可能这样写 # CC = gcc # CXX = g++ # CFLAGS = -O2 # 修改为使用PhyGCC和飞腾优化 CC = /opt/phytium/phygcc/bin/phygcc CXX = /opt/phytium/phygcc/bin/phyg++ CFLAGS = -O3 -mtune=ftc800 -flto CXXFLAGS = -O3 -mtune=ftc800 -flto

如果项目使用autoconfautomake./configure脚本),则可以在配置时指定编译器:

./configure CC=phygcc CXX=phyg++ CFLAGS="-O3 -mtune=ftc800" CXXFLAGS="-O3 -mtune=ftc800"

7. 常见问题排查与解决心得

在安装和使用PhyGCC的过程中,我遇到了不少问题,这里把典型的几个列出来,供你参考。

7.1 编译或运行时找不到动态库(.so文件)

问题现象:执行phygcc或编译出的程序时,报错error while loading shared libraries: libxxx.so.x: cannot open shared object file

原因与解决

  1. PhyGCC自带的库未加入系统库路径:按照第3.2节中步骤3,确保将PhyGCC的liblib64目录添加到/etc/ld.so.conf.d/下的配置文件中,并运行sudo ldconfig
  2. 依赖库版本不匹配:PhyGCC可能依赖比系统更新版本的libstdc++.so.6libgmp.so.10等。首先检查PhyGCC目录下的库版本:
    ls -l /opt/phytium/phygcc/lib64/libstdc++.so.*
    如果版本确实比系统的高(如PhyGCC是libstdc++.so.6.0.28,系统是libstdc++.so.6.0.25),你有两个选择:
    • 将PhyGCC的库路径放在系统路径之前:在/etc/ld.so.conf.d/phygcc.conf文件中,确保PhyGCC的路径在标准库路径(如/usr/lib64)之上。但需谨慎,可能影响其他程序。
    • 将高版本库复制(或软链接)到系统目录(不推荐,可能破坏系统稳定性):
      sudo cp /opt/phytium/phygcc/lib64/libstdc++.so.6.0.28 /usr/lib64/ cd /usr/lib64 sudo ln -sf libstdc++.so.6.0.28 libstdc++.so.6 sudo ldconfig
    更安全的做法:在运行你的程序时,通过环境变量LD_LIBRARY_PATH临时指定库路径:
    LD_LIBRARY_PATH=/opt/phytium/phygcc/lib64:$LD_LIBRARY_PATH ./my_app

7.2 编译大型项目时出现内部编译器错误(ICE)

问题现象:编译过程中,编译器突然崩溃,报错internal compiler error: Segmentation fault或类似信息。

原因与解决

  1. 编译器Bug:任何编译器都有Bug,PhyGCC作为定制版本,在某些极端代码模式或优化组合下可能触发。
  2. 内存不足:复杂的模板元编程或巨大的函数在-O2/-O3优化下,会消耗大量内存。

排查步骤

  • 简化重现:尝试创建一个能触发该错误的最小代码片段。这有助于判断是项目代码问题还是编译器问题。
  • 降低优化级别:先用-O0-O1编译,如果能通过,再逐步提高优化级别,定位是哪个优化导致的。
  • 关闭特定优化:尝试关闭可疑的优化,如-fno-tree-vectorize(关闭向量化)、-fno-unroll-loops(关闭循环展开)。
  • 检查内存:使用tophtop观察编译进程的内存占用。如果接近物理内存大小,考虑增加交换空间或使用-j参数减少并行编译任务数。
  • 报告问题:如果找到了稳定的重现方法,可以整理代码和编译命令,向PhyGCC的提供方(飞腾或系统厂商)反馈。

7.3 性能提升不明显甚至倒退

问题现象:使用了-mtune=ftc800等优化选项后,程序运行时间没有减少,反而增加了。

原因与解决

  1. 优化选项不匹配-mtune=ftc800是针对FTC800系列调优的。如果你的CPU是FTC600系列,使用这个选项可能产生负优化。确认你的CPU型号(cat /proc/cpuinfo | grep implementercat /proc/cpuinfo | grep part),并尝试-mtune=ftc600-mtune=generic
  2. 程序特性不符:PhyGCC的优化主要集中在数值计算、循环、向量化等方面。如果你的程序是I/O密集型、网络密集型,或者大部分时间在调用不受编译器优化的第三方闭源库,那么编译器优化带来的提升自然有限。
  3. Benchmark不准确:确保性能测试是在系统空闲、关闭频率缩放(cpupower frequency-set --governor performance)、多次运行取平均值的情况下进行的,以排除干扰。
  4. 反优化(De-optimization):激进的优化(如-O3下的过度循环展开)可能导致代码体积膨胀,引发更多的指令缓存(I-cache)失效,从而降低性能。可以尝试使用-Os(优化大小)或-O2代替-O3,或者配合使用-fprofile-generate-fprofile-use进行基于性能分析的优化(PGO)。

8. 进阶话题:与其他工具链的协作

PhyGCC作为编译器,只是开发工具链中的一环。在实际项目中,还需要考虑它与调试器、性能分析工具、第三方库的协作。

8.1 调试器(GDB)支持

使用PhyGCC编译带调试信息的程序(-g选项)后,可以使用系统自带的GDB进行调试。但需要注意,如果PhyGCC的libstdc++版本与系统GDB内置的Python脚本不兼容,在调试C++ STL容器时可能会遇到一些显示问题。通常问题不大,如果遇到,可以尝试使用PhyGCC配套的GDB(如果有提供),或者升级系统的GDB到较新版本。

8.2 性能剖析(Profiling)与优化反馈

要真正发挥PhyGCC的优化潜力,离不开性能剖析。gprof是GCC工具链自带的经典性能分析工具。使用步骤如下:

# 1. 编译时加上-pg选项 phygcc -O3 -mtune=ftc800 -pg -o myapp myapp.c # 2. 运行程序,会生成 gmon.out 文件 ./myapp # 3. 使用gprof分析 gprof myapp gmon.out > analysis.txt

分析analysis.txt,找到热点函数,然后可以针对这些函数调整代码结构(比如减少函数调用开销、优化循环),或者尝试不同的编译器优化选项组合。

更强大的工具是perf(Linux内核自带):

# 记录性能事件 sudo perf record -g ./myapp # 生成报告 sudo perf report

perf可以给出更底层的CPU周期、缓存命中率等信息,帮助你判断性能瓶颈是在CPU执行、内存访问还是分支预测。

8.3 链接第三方库

如果你的项目需要链接第三方库(如OpenBLAS、FFTW、Boost),需要确保这些库也是针对ARM64架构编译的,并且最好使用相同或兼容的编译器(PhyGCC)进行编译,以获得最佳的ABI兼容性和性能。

例如,编译OpenBLAS:

git clone https://github.com/xianyi/OpenBLAS.git cd OpenBLAS make CC=phygcc FC=phygfortran HOSTCC=gcc TARGET=ARMV8 sudo make PREFIX=/usr/local/opt/openblas install

然后在编译自己的程序时,指定链接路径和库名:

phygcc -O3 -mtune=ftc800 -I/usr/local/opt/openblas/include -L/usr/local/opt/openblas/lib -lopenblas -o my_math_app my_math_app.c

8.4 与交叉编译工具链的区分

本文讨论的是在飞腾服务器本机上进行编译的“本地编译”(Native Compilation)。PhyGCC通常也指本地编译器。而“交叉编译”(Cross Compilation)是指在x86主机上编译出能在ARM/飞腾上运行的程序,这需要另外的交叉编译工具链(如aarch64-linux-gnu-gcc)。不要混淆两者。如果你需要在x86开发机上为飞腾平台编译程序,应寻找或构建对应的飞腾交叉编译工具链,其名称可能类似aarch64-phytium-linux-gnu-gcc

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询