vs2015 cuda9.0 linked SHA1_Init with CUDA implement instead of openssl cpu libs












-1















I am a beginner to cuda, c++ and I am trying to move openssl sha1 cpu code to cuda c,but I ran into a weired problem.



here is the minimum code that can reproduce the problem.
There are three files in this vs2015 cuda9.0 project. They are main.cpp ,sha1.cu and sha1.h



//main.cpp
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include "opensslsha.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)
{

}
}


The main.cpp uses C/C++ compiler and sha1.cu uses CUDA C/C++



And I add openssl headers into the AdditionalIncludeDirectories,set directory which contains ssleay32.lib and libeay32.lib to library path,set AdditionalDependencies with ssleay32.lib, libeay32.lib .




Then the project built with no error and no warning. But when I run it
or debug it,I found the function SHA1_Init runs into device code and
the program crashed immediately.



why the compiler linked function SHA1_Init with the cuda device
SHA1_Init implement which has a namespace cudatest wrapped instead
of a ssleay32.lib, libeay32.lib CPU implement?











share|improve this question



























    -1















    I am a beginner to cuda, c++ and I am trying to move openssl sha1 cpu code to cuda c,but I ran into a weired problem.



    here is the minimum code that can reproduce the problem.
    There are three files in this vs2015 cuda9.0 project. They are main.cpp ,sha1.cu and sha1.h



    //main.cpp
    #include "cuda_runtime.h"
    #include "device_launch_parameters.h"
    #include "opensslsha.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)
    {

    }
    }


    The main.cpp uses C/C++ compiler and sha1.cu uses CUDA C/C++



    And I add openssl headers into the AdditionalIncludeDirectories,set directory which contains ssleay32.lib and libeay32.lib to library path,set AdditionalDependencies with ssleay32.lib, libeay32.lib .




    Then the project built with no error and no warning. But when I run it
    or debug it,I found the function SHA1_Init runs into device code and
    the program crashed immediately.



    why the compiler linked function SHA1_Init with the cuda device
    SHA1_Init implement which has a namespace cudatest wrapped instead
    of a ssleay32.lib, libeay32.lib CPU implement?











    share|improve this question

























      -1












      -1








      -1








      I am a beginner to cuda, c++ and I am trying to move openssl sha1 cpu code to cuda c,but I ran into a weired problem.



      here is the minimum code that can reproduce the problem.
      There are three files in this vs2015 cuda9.0 project. They are main.cpp ,sha1.cu and sha1.h



      //main.cpp
      #include "cuda_runtime.h"
      #include "device_launch_parameters.h"
      #include "opensslsha.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)
      {

      }
      }


      The main.cpp uses C/C++ compiler and sha1.cu uses CUDA C/C++



      And I add openssl headers into the AdditionalIncludeDirectories,set directory which contains ssleay32.lib and libeay32.lib to library path,set AdditionalDependencies with ssleay32.lib, libeay32.lib .




      Then the project built with no error and no warning. But when I run it
      or debug it,I found the function SHA1_Init runs into device code and
      the program crashed immediately.



      why the compiler linked function SHA1_Init with the cuda device
      SHA1_Init implement which has a namespace cudatest wrapped instead
      of a ssleay32.lib, libeay32.lib CPU implement?











      share|improve this question














      I am a beginner to cuda, c++ and I am trying to move openssl sha1 cpu code to cuda c,but I ran into a weired problem.



      here is the minimum code that can reproduce the problem.
      There are three files in this vs2015 cuda9.0 project. They are main.cpp ,sha1.cu and sha1.h



      //main.cpp
      #include "cuda_runtime.h"
      #include "device_launch_parameters.h"
      #include "opensslsha.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)
      {

      }
      }


      The main.cpp uses C/C++ compiler and sha1.cu uses CUDA C/C++



      And I add openssl headers into the AdditionalIncludeDirectories,set directory which contains ssleay32.lib and libeay32.lib to library path,set AdditionalDependencies with ssleay32.lib, libeay32.lib .




      Then the project built with no error and no warning. But when I run it
      or debug it,I found the function SHA1_Init runs into device code and
      the program crashed immediately.



      why the compiler linked function SHA1_Init with the cuda device
      SHA1_Init implement which has a namespace cudatest wrapped instead
      of a ssleay32.lib, libeay32.lib CPU implement?








      c++ visual-studio cuda openssl






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Dec 18 '18 at 15:49









      vraivrai

      1




      1
























          1 Answer
          1






          active

          oldest

          votes


















          0














          OK,I found the problem.I shouldn't use extern "C" in a c++ namespace.It make the function visiable to the global namespace. if you define another c SHA1_Init function in a .cpp file ,the linker will complain.But if another SHA1_Init is in a openssl lib,the vs C/C++ linker warnned nothing but linked to the cuda implement.






          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53836640%2fvs2015-cuda9-0-linked-sha1-init-with-cuda-implement-instead-of-openssl-cpu-libs%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            OK,I found the problem.I shouldn't use extern "C" in a c++ namespace.It make the function visiable to the global namespace. if you define another c SHA1_Init function in a .cpp file ,the linker will complain.But if another SHA1_Init is in a openssl lib,the vs C/C++ linker warnned nothing but linked to the cuda implement.






            share|improve this answer




























              0














              OK,I found the problem.I shouldn't use extern "C" in a c++ namespace.It make the function visiable to the global namespace. if you define another c SHA1_Init function in a .cpp file ,the linker will complain.But if another SHA1_Init is in a openssl lib,the vs C/C++ linker warnned nothing but linked to the cuda implement.






              share|improve this answer


























                0












                0








                0







                OK,I found the problem.I shouldn't use extern "C" in a c++ namespace.It make the function visiable to the global namespace. if you define another c SHA1_Init function in a .cpp file ,the linker will complain.But if another SHA1_Init is in a openssl lib,the vs C/C++ linker warnned nothing but linked to the cuda implement.






                share|improve this answer













                OK,I found the problem.I shouldn't use extern "C" in a c++ namespace.It make the function visiable to the global namespace. if you define another c SHA1_Init function in a .cpp file ,the linker will complain.But if another SHA1_Init is in a openssl lib,the vs C/C++ linker warnned nothing but linked to the cuda implement.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Dec 29 '18 at 2:50









                vraivrai

                1




                1






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53836640%2fvs2015-cuda9-0-linked-sha1-init-with-cuda-implement-instead-of-openssl-cpu-libs%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Monofisismo

                    Angular Downloading a file using contenturl with Basic Authentication

                    Olmecas