如何包含OpenCL库来生成独立应用程序?

时间:2011-04-08 10:28:23

标签: linux linker opencl

我试图向同事展示我可以用OpenCL做的花哨的东西,但是exec不会在她的电脑上运行。一些libopencl.so(或类似)文件丢失(即她没有安装OpenCL)。所以我可能更基本的(Linux)问题是,如何包含所有必需的so文件,我的小C + OpenCL程序也将在没有OpenCL的机器上运行?

1 个答案:

答案 0 :(得分:2)

正如Damon的评论已经指出的那样,这是不可能以一般方式进行的,因为每种设备都有自己的供应商,而且该供应商有自己的OpenCL实现。但是,如果您想要做的只是拥有可在大多数Linux计算机上运行的OpenCL应用程序的“可移植”副本,那么有一种方法可以实现这一目标。

  1. 下载AMD APP SDK(目前版本为2.4)。我将假设其64位版本,但它应该与32位或其他版本号完全相同,只需更改相应的字符串。

  2. 将SDK解压缩到应用程序可执行文件的子目录。因此,例如,如果应用程序位于$ HOME / myapp中,则SDK文件应位于$ HOME / myapp / AMD-APP-SDK-v2.4-lnx64中。

  3. 将icd-registration.tgz存档中的ICD文件解压缩到名为icd的文件夹中。所以我们应该有$ HOME / myapp / AMD-APP-SDK-v2.4-lnx64 / icd / amdocl32.icd(和amdocl64.icd)。

  4. 现在我们有了AMD APP SDK便携式安装的工作方式,它可以在大多数x86处理器上运行。我们只需要在启动应用程序之前设置适当的环境变量。由于我不是GNU / Linux人员,并且不太了解bash,因此我已经硬编码了可移植目录的路径。据推测,在某种程度上可以自动获取当前位置,这显然会更好。

    #!/bin/bash
    DIRECTORY=$HOME/myapp
    export OPENCL_VENDOR_PATH=$DIRECTORY/AMD-APP-SDK-v2.4-lnx64/icd
    export AMDAPPSDKROOT=$DIRECTORY/AMD-APP-SDK-v2.4-lnx64
    export LD_LIBRARY_PATH=$AMDAPPSDKROOT/lib/x86_64:$LD_LIBRARY_PATH
    ./myapp
    

    上述脚本应放在应用程序的根目录中,即$ HOME / myapp / scriptname。因此,我们可以通过./scriptname启动便携式应用程序。正如我所说的,因为我不太了解bash,上面的脚本当然可以更好,处理程序的参数并自动找出脚本位置。但它应该显示如何做到这一点的一般想法。