我必须与OpenSSL libeay32.dll动态链接。 我正在使用Visual C ++ Express 2008编写本机c ++控制台应用程序。
我在OpenSSL发行版中包含了一个头文件evp.h。建筑和......:
error LNK2001: unresolved external symbol _EVP_aes_256_cbc
error LNK2001: unresolved external symbol _EVP_DecryptInit
error LNK2001: unresolved external symbol _EVP_CIPHER_CTX_init
如何调用libeay32.dll方法?我不知道在哪里指定它的文件名
答案 0 :(得分:3)
您可能还需要将一个.lib文件添加到编译器的链接器输入中。查看您正在使用的库的文档。
答案 1 :(得分:3)
尝试使用Win32 API的LoadLibrary函数,以下链接可能会有所帮助:example
答案 2 :(得分:3)
#pragma comment(lib,"libeay32.lib")
(您可能需要由您使用的相同编译器生成.lib存根)。请注意,.lib
有两种。第一个用于动态但隐式链接,第二个用于静态链接。动态隐式链接的包含为您加载DLL的存根,而静态链接的存根包含实际的实现。
答案 3 :(得分:2)
在项目属性,配置属性,链接器,输入中 - 在“其他依赖项”下添加库名称。
[注意,这实际上会与库链接。如果您真的想要动态加载库,则需要在DLL上调用LoadLibrary(),然后使用GetProcAddress()获取所需函数的函数指针。
参见例如
http://msdn.microsoft.com/en-us/library/ms886736.aspx
和
答案 4 :(得分:0)
如果从dll调用方法,则可以使用explict动态链接方法。
错误:您将OpenSSL分发dll中的头文件evp.h包含到您的项目中
当您动态链接时,无需将.d从DLL包含到项目中。
例如。
让你的libeay32.dll有一个导出函数:int add(int x, int y);
然后在你的项目中调用它来声明一个函数指针,然后按如下方式调用方法add:
typedef int (*AddfnPtr)(int num1, int num2);
int num1 = 2, num2 = 3 ;
HMODULE handle = NULL;
handle = LoadLibrary("libeay32.dll");
if (handle != NULL)
{
AddfnPtr addfnptr = (AddfnPtr)GetProcAddr(handle, NULL);
if (addfnptr != NULL)
{
int res = addfnptr(num1,num2);
cout << "res = "<<res;
}
}