首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cuda NPP库的静态包装器

Cuda NPP库的静态包装器
EN

Stack Overflow用户
提问于 2019-02-04 16:13:48
回答 1查看 176关注 0票数 0

我遇到了一个问题,试图为一些NPP icc函数创建静态包装器,以便从cGo (Golang)环境中调用它们。

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

wrapper.c

代码语言:javascript
复制
#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

代码语言:javascript
复制
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

caller.c

代码语言:javascript
复制
#include <stdio.h>
#include "nppGo.h"

int main() {

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

return (int)ret;
}

buildtest.sh

代码语言:javascript
复制
nvcc caller.c -L. -lnppGo -o nppGo

最后我得到了这个错误信息

代码语言:javascript
复制
./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

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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2019-02-04 16:35:19

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

代码语言:javascript
复制
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创建一个临时静态库。

代码语言:javascript
复制
ar rcs nppGo_temp.a nppGo.o

LibnppGo.mri看起来会像这样:

代码语言:javascript
复制
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

代码语言:javascript
复制
ar -M <LibnppGo.mri

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54512244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档