C++ 延迟加载加密++;cryptopp.dll
Crypto++库通过编译C++ 延迟加载加密++;cryptopp.dll,c++,dll,crypto++,delay-load,C++,Dll,Crypto++,Delay Load,Crypto++库通过编译cryptolib.lib和cryptopp.lib支持后期绑定。这需要使用cryptopp.dll。当尝试通过/DELAYLOAD:cryptopp.dll延迟加载此dll时,会导致链接错误,由于需要导入,无法延迟加载 例如,请参见以下代码: #include <Crypto++/dll.h> #include <crypto++/base64.h> bool HexDecode(const std::string& strHex,
cryptolib.lib
和cryptopp.lib
支持后期绑定。这需要使用cryptopp.dll
。当尝试通过/DELAYLOAD:cryptopp.dll
延迟加载此dll时,会导致链接错误,由于需要导入,无法延迟加载
例如,请参见以下代码:
#include <Crypto++/dll.h>
#include <crypto++/base64.h>
bool HexDecode(const std::string& strHex, std::string& strData)
{
try
{
CryptoPP::StringSource(strHex, true,
new CryptoPP::Base64Decoder(
new CryptoPP::StringSink(strData)));
}
catch(...)
{
return false;
}
return true;
}
是否有人已成功延迟加载cryptopp.dll
Crypto++库通过编译cryptolib.lib和cryptopp.lib来支持后期绑定
该DLL是一个FIPS DLL。将功能拆分为两个独立库的实际目的是提供FIPS 140-2所需的逻辑模块边界。FIPS模块边界为cryptopp.dll
FIPS DLL仅包括FIPS算法,如AES和RSA。我建议您不惜一切代价避免使用FIPS DLL。工作起来很痛苦。另请参见Crypto++wiki上的
如果您想要一个DLL,那么使用自己的API编写自己的包装器DLL,然后链接到Crypto++静态库
在wrapper DLL的情况下(而且因为您似乎有经验),我强烈建议您使用它作为起点。如果您熟悉makefiles(我想您是),那么您会发现使用makefiles比使用makefiles容易得多
链接:致命错误LNK1194:无法延迟加载“cryptopp.dll”,因为导入了数据符号“\uu declspec(dllimport)bool(\uu cdecl*cryptopp::g\u passignnttointeger)(类类型\u info const&,void*,void const*)”(\uu imp\ug)_pAssignIntToInteger@CryptoPP@@3P6A_NABVtype_信息@@PAXPBX@ZA)". 不带/DELAYLOAD的链接:cryptopp.dll 这是一个有趣的问题,因为您有两个库,我不清楚符号在哪个库中。第一个库是FIPS DLL(cryptopp.DLL),它包括AES、RSA等。第二个库是静态库(cryptolib.Lib),它包括HexEncoder、FileSource和其他支持内容 我相信
g_passignintotointeger
应该在静态库(cryptlib.Lib)中,因为它是算法参数的一部分。例如,请参见。但是,从上面的错误来看,由于符号名\uuuu imp\uu?g\u passignintotointeger…
,它似乎驻留在FIPS DLL中
现在增加的问题是,g_passignintotointeger
是一个函数指针,编译器不会对它们进行优化。所以链接器从不丢弃Integer
相关符号,这就是解耦的关键
此时,我们删除了g\u passigninto INTEGER
,并添加了defineCRYPTOPP\u NO\u ASSIGN\u TO\u INTEGER
,以完成任务。定义确保可以丢弃符号和不需要的代码,如Integer
code
Crypto++库通过编译cryptolib.lib和cryptopp.lib来支持后期绑定
该DLL是一个FIPS DLL。将功能拆分为两个独立库的实际目的是提供FIPS 140-2所需的逻辑模块边界。FIPS模块边界为cryptopp.dll
FIPS DLL仅包括FIPS算法,如AES和RSA。我建议您不惜一切代价避免使用FIPS DLL。工作起来很痛苦。另请参见Crypto++wiki上的
如果您想要一个DLL,那么使用自己的API编写自己的包装器DLL,然后链接到Crypto++静态库
在wrapper DLL的情况下(而且因为您似乎有经验),我强烈建议您使用它作为起点。如果您熟悉makefiles(我想您是),那么您会发现使用makefiles比使用makefiles容易得多
链接:致命错误LNK1194:无法延迟加载“cryptopp.dll”,因为导入了数据符号“\uu declspec(dllimport)bool(\uu cdecl*cryptopp::g\u passignnttointeger)(类类型\u info const&,void*,void const*)”(\uu imp\ug)_pAssignIntToInteger@CryptoPP@@3P6A_NABVtype_信息@@PAXPBX@ZA)". 不带/DELAYLOAD的链接:cryptopp.dll
这是一个有趣的问题,因为您有两个库,我不清楚符号在哪个库中。第一个库是FIPS DLL(cryptopp.DLL),它包括AES、RSA等。第二个库是静态库(cryptolib.Lib),它包括HexEncoder、FileSource和其他支持内容
我相信g_passignintotointeger
应该在静态库(cryptlib.Lib)中,因为它是算法参数的一部分。例如,请参见。但是,从上面的错误来看,由于符号名\uuuu imp\uu?g\u passignintotointeger…
,它似乎驻留在FIPS DLL中
现在增加的问题是,g_passignintotointeger
是一个函数指针,编译器不会对它们进行优化。所以链接器从不丢弃Integer
相关符号,这就是解耦的关键
此时,我们删除了g\u passigninto INTEGER
,并添加了defineCRYPTOPP\u NO\u ASSIGN\u TO\u INTEGER
,以完成任务。定义确保可以丢弃符号和不需要的代码,如Integer
code
LINK : fatal error LNK1194: Delay loading "cryptopp.dll" not possible because of import of data symbol ""__declspec(dllimport) bool (__cdecl* CryptoPP::g_pAssignIntToInteger)(class type_info const &,void *,void const *)" (__imp_?g_pAssignIntToInteger@CryptoPP@@3P6A_NABVtype_info@@PAXPBX@ZA)". Link without /DELAYLOAD:cryptopp.dll