gpt4 book ai didi

c - Cuda NPP 库的静态包装器

转载 作者:行者123 更新时间:2023-11-30 16:22:16 24 4
gpt4 key购买 nike

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

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

包装器.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

最佳答案

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

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

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

关于c - Cuda NPP 库的静态包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54512244/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com