Я новичок в cuda, c ++, и я пытаюсь перевести код openssl sha1 cpu в cuda c, но я столкнулся с изрядной проблемой.
вот минимальный код, который может воспроизвести проблему.В этом проекте vs2015 cuda9.0 есть три файла.Это main.cpp, sha1.cu и sha1.h
//main.cpp
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include "openssl\sha.h"
int main()
{
SHA_CTX ctx;
SHA1_Init(&ctx);
return 0;
}
//sha1.h
#ifndef SHA1_H
#define SHA1_H
#include <stdint.h>
#include <cuda_runtime.h>
namespace cudatest {
#ifdef __cplusplus
extern "C" {
#endif
typedef struct
{
uint32_t state[5];
uint32_t count[2];
unsigned char buffer[64];
} SHA1_CTX;
#define SHA_CTX SHA1_CTX
#define SHA_DIGEST_LENGTH 20
__device__ void SHA1_Init(SHA1_CTX * context);
#ifdef __cplusplus
}
#endif
}
#endif /* SHA1_H */
//sha1.cu
#include <cuda_runtime.h>
#include "sha1.h"
namespace cudatest {
__device__ void SHA1_Init(SHA1_CTX * context)
{
}
}
. Main.cpp использует компилятор C / C ++, а sha1.cu использует CUDA C / C ++
И я добавляю opensslЗаголовки в AdditionalIncludeDirectories, установите каталог, который содержит ssleay32.lib и libeay32.lib, в путь к библиотеке, установите AdditionalDependencies с ssleay32.lib, libeay32.lib.
Затем проект собран без ошибок и предупреждений,Но когда я запускаю его или отлаживаю, я обнаружил, что функция SHA1_Init запускается в коде устройства, и программа сразу же вылетает.
, почему компилятор связывает функцию SHA1_Init с устройством SHA1_Init устройства cuda, в котором вместо завернутой Cudatest пространства имен вместоa ssleay32.lib, libeay32.lib Реализация процессора?