【问题标题】:Static wrapper for Cuda NPP libraryCuda NPP 库的静态包装器
【发布时间】:2019-06-27 23:07:32
【问题描述】:

我在尝试为某些 NPP icc 函数创建静态包装器以从 cGo (Golang) 环境中调用它们时遇到问题。

我能够使用提供的静态 NPP 库创建和编译(C 语言)可执行文件,并且运行良好。然后我将它编译为一个库(带有必要的标志)。但是当我尝试从另一个可执行文件(纯 C 或 cGo)链接该库时,我收到错误消息“未定义对 nppiYCbCr420ToRGB_8u_P3C3R 的引用”。我做错了什么?

包装器.c

#include <nppi_color_conversion.h>
#include <cuda_runtime_api.h>

int YCbCr420ToRGB() {
  NppiSize oSizeROI;

  const Npp8u * const pSrc[3];
  int cSrcStep[3];
  Npp8u *cDst;

  NppStatus ret = nppiYCbCr420ToRGB_8u_P3C3R(pSrc, cSrcStep, cDst, 0, oSizeROI);

  return (int)ret; // ret = 14
}

build.sh

nvcc nppGo.c -lib -lnppicc_static -lnppc_static -lculibos -lcudart_static -lpthread -ldl -lrt -I /usr/local/cuda-10.0/include -L /usr/local/cuda-10.0/lib64 -o libnppGo

调用者.c

#include <stdio.h>
#include "nppGo.h"

int main() {

  int ret = YCbCr420ToRGB();
  printf("Return code is: %d\n", ret);

return (int)ret;
}

buildtest.sh

nvcc caller.c -L. -lnppGo -o nppGo

我终于收到了这个错误信息

./libnppGo.a(tmpxft_0000204d_00000000-2_nppGo.o): In function `YCbCr420ToRGB':
nppGo.c:(.text+0xf9): undefined reference to `nppiYCbCr420ToRGB_8u_P3C3R'
collect2: error: ld returned 1 exit status

我也尝试使用另一个链接器/编译器,结果相同:

g++ -c nppGo.c -I /usr/local/cuda-10.0/include
ar rcs nppGo.a nppGo.o libnppicc_static.a libnppc_static.a libculibos.a libcudart_static.a libdl.a

【问题讨论】:

    标签: c static-libraries npp


    【解决方案1】:

    以下合并静态库的命令可能无法正常工作。

    ar rcs nppGo.a nppGo.o libnppicc_static.a libnppc_static.a libculibos.a libcudart_static.a libdl.a
    

    改为使用 MRI 脚本来合并这些静态库。喜欢使用以下脚本创建 nppGo.a,我们将其命名为 LibnppGo.mri

    在此之前,我们需要为nppGo.o 创建一个临时静态库。

    ar rcs nppGo_temp.a nppGo.o
    

    LibnppGo.mri 看起来像:

    create nppGo.a
    addlib nppGo_temp.a
    addlib libnppicc_static.a
    addlib libnppc_static.a
    addlib libculibos.a 
    addlib libcudart_static.a
    addlib libdl.a
    save
    end
    

    并执行ar为:

    ar -M <LibnppGo.mri
    

    你应该得到一个正确的最终静态库,你可以正确链接。

    【讨论】:

    • 谢谢gjha。我最终决定不使用 C 包装器,我现在使用 cGo 方法直接从 Golang 调用 NPP 函数。
    猜你喜欢
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 2014-08-25
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    相关资源
    最近更新 更多