Intel® FPGA RTE for OpenCL™ Pro Edition: 入门指南

ID 683173
日期 3/28/2022
Public
文档目录

1.1.1. GCC要求

对于Linux主机系统,Intel® FPGA Emulation Platform for OpenCL™软件要求系统上至少要有GCC 7.2.0。GCC 7.2.0提供libstdc++.so.6共享库。 您也可以使用更高的版本。具体来说,需要libstdc++.so.6.0.24库或更高版本,因为其用于定义GLIBCXX_3.4.24CXXABI_1.3.11符号版本。

如果您没有安装足够新的GCC和libstdc++.so.6库,那么当您尝试运行面向Intel® FPGA Emulation Platform for OpenCL™软件的OpenCL主机程序时可能会遇到问题。如果在运行时没有找到正确版本的libstdc++.so库,那么clGetPlatformIDs函数的调用将无法加载仿真平台,并返回CL_PLATFORM_NOT_FOUND_KHR (error code -1001)。根据找到的libstdc++.so库的版本,clGetPlatformIDs函数的调用可能会成功,但稍后对clCreateContext函数的调用可能会失败,返回CL_DEVICE_NOT_AVAILABLE (error code -2)。

请运行以下命令对所使用的GCC版本进行验证:

$ gcc -dumpversion

确保此命令报告版本7.2.0或更高版本。如果您没有一个足够新的GCC,那么请按照以下说明在系统上安装更高版本的GCC。

安装GCC 7

如下节所述,安装所需GCC的步骤因主机操作系统而异。

Ubuntu*

如果您的Ubuntu版本默认不包含GCC 7.x或更高版本,那么您可以使用以下命令获得GCC 7.x:

$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test 
$ sudo apt-get update 
$ sudo apt-get install gcc-7 g++-7
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 60 \  
--slave /usr/bin/g++ g++ /usr/bin/g++-7 
$ sudo update-alternatives --config gcc     
注: 确保为sudo update-alternatives命令选择gcc-7update-alternatives工具可根据需要切换GCC版本。
CentOS和Red Hat Enterprise Linux* Version 7
注: 遗憾的是,安装Developer Toolset* (例如:devtoolset-7)并不能达到想要的结果,因为它不包含更新的libstdc++.so.6库。Developer Toolset*提供一个自定义版本的GCC,其使用的是系统上之前安装的旧版本libstdc++.so.6库。

对于CentOS和Red Hat Enterprise Linux version 7,Intel®建议从源代码编译GCC,并按照以下说明进行安装:

  1. 下载您想要安装的GCC版本的压缩包。
    wget http://www.netgull.com/gcc/releases/gcc-7.2.0/gcc-7.2.0.tar.gz
  2. 解压tar存档并更改当前工作目录。
    tar zxf gcc-7.2.0.tar.gz
    cd gcc-7.2.0
  3. 安装bzip2包。
    yum -y install bzip2
  4. 运行download_prerequisites脚本以下载GCC所要求的一些依赖。
    注: 您必须从GCC源代码树的顶层运行脚本。
    ./contrib/download_prerequisites
  5. 下载依赖后,执行以下命令开始配置GCC构建环境:
    ./configure --disable-multilib --enable-languages=c,c++
  6. 运行以下命令编译源代码。编译可能需要几个小时才能完成。
    make -j 4
    make install
  7. 请参考验证GCC安装部分来了解验证GCC安装是否成功。

SUSE Enterprise Linux* 12

关于SUSE,Intel®建议您从源代码编译GCC,并按照为CentOS和Red Hat Enterprise Linux提供的说明进行安装。

验证GCC安装

要验证GCC安装,需确保以下几点:

  • Shell能够找到正确的GCC二进制文件。
  • 更新的GCC使用正确的共享库(特别是libstdc++.so.6)。

这取决于如何安装GCC和设置$PATH$LD_LIBRARY_PATH环境变量。您可能已经将GCC二进制文件和库文件安装到了操作系统的默认位置。

验证使用了正确的GCC二进制文件

执行以下步骤:

  1. 验证是否正在使用最新安装的GCC二进制文件。
    $ which gcc 
  2. 确保输出指向正确的GCC。
    $ gcc –dumpversion 
  3. 确保GCC报告7.2.0或更高版本。

如果上述命令未报告正确的GCC版本,那么需要修改$PATH环境变量以指向最新安装的GCC二进制文件的位置。

对于Ubuntu,GCC二进制文件的默认安装位置是/usr/bin;,库文件的默认安装位置是/usr/lib64。然而,二进制文件是版本化的(例如:gcc-7)。使用update-alternatives工具来确保gcc是一个指向所需GCC版本的符号链接。在Ubuntu系统上,不需要更新$PATH$LD_LIBRARY_PATH环境变量,因为shell和动态链接器可以分别自动在正确的位置搜索二进制文件和库文件。

提示:

您可以将以下命令放在shell启动脚本或环境设置脚本中,以便在输入命令时自动设置开发环境。

$ export PATH=</path/to/new/gcc>/bin:$PATH
请使用以下命令来验证是否已经正确修改$PATH环境变量:
$ echo $PATH 

检查输出以确保最新安装的GCC的路径是$PATH的一部分。重复这些步骤以确保正在使用正确的GCC二进制文件。

验证使用了正确的共享库

要验证是否正在使用新的GCC库,请按照以下步骤检查测试编译是否链接到正确的libstdc++.so.6库版本:

$ echo "int main() { return 0; }" > test.cpp 
$ g++ -Wl,--no-as-needed test.cpp -o test 
$ ldd test 
        linux-vdso.so.1 =>  (0x00007fff6df35000) 
        libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003451600000) 
        libm.so.6 => /lib64/libm.so.6 (0x0000003446a00000) 
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x000000344d600000) 
        libc.so.6 => /lib64/libc.so.6 (0x0000003446600000) 
        /lib64/ld-linux-x86-64.so.2 (0x000055ff56398000) 
$ strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX_3.4.24GLIBCXX_3.4.24

使用ldd命令的输出来确定需要与strings命令一起使用的libstdc++.so.6库的路径(请参考高显字符串;输出可能会不同)。确保strings命令返回GLIBCXX_3.4.24

或者,libstdc++.so.6文件通常是一个指向实际库的符号链接,其中附加了版本号。因此,除了对libstdc++.so.6调用strings命令,您可以使用下面的readlink命令来验证libstdc++.so.6是否指向libstdc++的足够新的版本:

$ readlink /usr/lib64/libstdc++.so.6 
libstdc++.so.6.0.24 

使用(之前执行的)ldd命令的输出来确定需要与readlink命令一起使用的libstdc++.so.6的路径。确保readlink命令报告libstdc++.so.6是指向libstdc++.so.6.0.24的符号链接。高于6.0.24的版本也可能工作。

如果上述命令未报告正在使用正确的共享库,那么可能需要修改$LD_LIBRARY_PATH环境变量以指向最新安装的GCC库的位置。

提示:

您可以将以下命令放在shell启动脚本或环境设置脚本中,以便在输入命令时自动设置开发环境。

$ export LD_LIBRARY_PATH=</path/to/new/gcc>/lib64:$LD_LIBRARY_PATH 

请运行以下命令来验证是否已经正确修改$LD_LIBRARY_PATH环境变量:

$ echo $LD_LIBRARY_PATH 

检查输出以确保最新安装的GCC库包含在$LD_LIBRARY_PATH中。重复这些步骤以确保正在使用正确的GCC库(特别是libstdc++.so.6)。