Я столкнулся с проблемой при попытке создать статическую оболочку для некоторых функций icc NPP, чтобы вызвать их из среды cGo (Golang).
Я могу создать и скомпилировать исполняемый файл (язык C) с предоставленными статическими библиотеками NPP, и он хорошо работает.Затем я компилирую его как библиотеку (с необходимыми флагами).Но когда я пытаюсь связать эту библиотеку с другим исполняемым файлом (обычный C или cGo), я получаю сообщение об ошибке «неопределенная ссылка на nppiYCbCr420ToRGB_8u_P3C3R».Что я делаю не так?
wrapper.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
caller.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