- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在我的程序中计算 SHA3 以及在我的套接字中使用 AES 并决定使用 crypto++ 库。
我是 Visual Studio 环境的新手,之前没有任何 visual studio 方面的经验,但广泛从事 g++ (linux/mingw-w64) 方面的工作。我正在使用的第三方库之一推荐使用 Visual Studios(与 g++ 一起使用时会导致链接器错误)。
我收到链接器错误。错误:
LNK2001 unresolved external symbol "public: virtual void __cdecl CryptoPP::SHA3::Update(unsigned char const *,unsigned __int64)" (?Update@SHA3@CryptoPP@@UEAAXPEBE_K@Z) ConsoleApplication2 C:\Users\Admin\source\repos\ConsoleApplication2\ConsoleApplication2\ConsoleApplication2.obj 1
LNK2019 unresolved external symbol "public: virtual void __cdecl CryptoPP::SHA3::Restart(void)" (?Restart@SHA3@CryptoPP@@UEAAXXZ) referenced in function "public: __cdecl CryptoPP::SHA3::SHA3(unsigned int)" (??0SHA3@CryptoPP@@QEAA@I@Z) ConsoleApplication2 C:\Users\Admin\source\repos\ConsoleApplication2\ConsoleApplication2\ConsoleApplication2.obj 1
Error LNK2001 unresolved external symbol "public: virtual void __cdecl CryptoPP::SHA3::TruncatedFinal(unsigned char *,unsigned __int64)" (?TruncatedFinal@SHA3@CryptoPP@@UEAAXPEAE_K@Z) ConsoleApplication2 C:\Users\Admin\source\repos\ConsoleApplication2\ConsoleApplication2\ConsoleApplication2.obj 1
相同的代码在 g++ 中可以正常工作(mingw-w64 - 我正在使用在 mingw-w64 中创建的 dll)
操作系统:Windows 10 专业版 64 位
开发环境:Visual Studios 2017
目标:调试 x64
来源:
#include <sha3.h>
#include <filters.h>
#include <hex.h>
#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
#include <iostream>
#include <base64.h>
int main()
{
CryptoPP::SHA3_512 hash;
std::cout << hash.AlgorithmName() << " Test." << std::endl;
std::string in = "The quick brown fox jumps over the lazy dog";
std::vector<CryptoPP::byte> out(hash.DigestSize());
hash.CalculateTruncatedDigest(&out[0], hash.DigestSize(), reinterpret_cast<CryptoPP::byte*>(&in[0]), in.size());
std::cout << in << std::endl;
std::cout.setf(std::ios::hex, std::ios::basefield);
for_each(out.begin(), out.end(), [](CryptoPP::byte i) {
printf("%x", i);
});
std::cout << "Original String : " << str << std::endl;
return 0;
}
请告诉我如何在一些公共(public)文件夹中加载(复制)所有生成的 dll,就像 gcc 中的 make install 命令(工具)一样。
编辑:
我在附加依赖项中添加了 cryptopp.lib,并在附加库目录中添加了包含 cryptopp.lib 和 cryptopp.dll 的文件夹。我已经在 Path 环境变量中添加了目录。在 cryptolib 项目的 dll 生成期间,我在 Debug x64 配置中选择了 Multi Threaded Debug Dll。
最佳答案
Paul Sanders 非常正确,您要从 crypto++ DLL 使用的类和函数必须使用 _declspec(dllexport) / _declspec(dllimport) 进行限定。 .
其中一些已经完成,如 Crypto++ wiki page for Fips dll 中所述.它通过预处理器宏 CRYPTOPP_DLL
工作,该宏在 crypto++ header config.h
中定义并在 fips140.h
中使用。
但有一个问题 - 并非所有您想要的算法都在 FIPS 中,而且正如您发现的那样,它们没有导出用于 DLL。您可以修改其他 header 以添加 DLL 导出/导入,但请注意维基页面建议:“如果您确实需要 DLL,则提供一个链接到静态库的包装器 DLL。”。与其包装您使用的每个 crypto++ 算法的每个组件,不如将整个操作封装到一个高级类或函数中,然后从您的包装器 DLL 中导出/导入它会更方便。
GCC 默认导出所有内容,这就是共享库在 Linux 上为您工作的原因。
关于c++ - LNK2001 未解析的 SHA3 类成员的外部符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50643097/
几天前我问了一个类似的问题,它帮助我找到了 __declspec() 的正确方向,但我又被卡住了。我会尽可能清楚。希望有人能告诉我我做错了什么。它可能是一些小而简单的东西。 项目信息: jc:
我想在某些特定路径中创建某些文件的快捷方式(.lnk)。例如在 ("H:\happy\hi\new.lnk") 中创建我的文件 ("D:\New folder\new.exe") 的快捷方式我想用 p
This question already has answers here: What is an undefined reference/unresolved external symbol er
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我的 disk-on-key 中有一个可执行文件,位于 dir\program\prog.exe我想在 DoK 的根目录上有一个可执行文件的快捷方式,即 prog.lnk 将引用 dir\progra
我一直在寻找一种在 C# 中创建文件快捷方式的简单方法,但我只找到了执行此操作的外部 dll。这实际上非常令人惊讶,没有内置的方法可以做到这一点.. 无论如何,我知道 lnk 文件只是具有特定命令和给
我一直在寻找问题的解决方案,遇到了 JasonMArcher 回答的帖子,想知道我是否可以更具体地满足我的需求。 我们最近更换了一个新服务器,由于它的名称从//sbcmaster 更改为//sbcse
我有一堆.lnk文件,需要根据快捷方式指向的目标来区别对待它们。我发现很少有其他语言如何做到这一点,但与使用powershell做到这一点无关。 我已经试过了: $sh = New-Object -C
我在使用C++创建快捷方式时遇到问题。.lnk文件已创建,但是目标具有无效路径。 您能解释一下为什么这段代码没有创建正确的快捷方式吗?有人可以帮我修复我的代码吗? 这是代码 // RepChrome.
rmap_utils.h #ifndef UTILS_RANGE_MAP_H #define UTILS_RANGE_MAP_H #include #include #include #incl
这个问题在这里已经有了答案: Can't set value of static object field (error LNK2001: unresolved external symbol) (
我刚刚使用 NuGET 包管理器安装了 SFML 包。安装后。我从它的官方页面运行了一个基本程序。只需复制和粘贴。 #include int main() { sf::RenderWindo
这个问题在这里已经有了答案: Can't set value of static object field (error LNK2001: unresolved external symbol) (
这个问题已经有答案了: Windows shortcut (.lnk) parser in Java? (9 个回答) 已关闭 6 年前。 我在Windows的“最近的项目”中有一些文件夹/文件。我想
首先,对不起我的英语..如何将现有的快捷方式包含到我的解决方案中? 当我尝试将现有项目添加到我的项目中时,visual studio 似乎尝试添加链接目标,而不是链接本身,因为它给我以下错误: 找不到
我们有一个充满指向文件夹的快捷方式(.lnk 文件)的网络驱动器,我需要在 C# Winforms 应用程序中以编程方式遍历它们。 我有哪些实用选择? 最佳答案 添加 IWshRuntimeLibra
我正在编写 32 位服务应用程序,我希望能够在其中为登录用户 启动“开始”菜单项。我确实设法通过模拟用户并使用 CreateProcessAsUser 和命令行启动选定的 .lnk 文件来完成此任务:
当您尝试打开不再有效的快捷方式文件 (.lnk) 时,Windows 会提示您:“此快捷方式已被更改或移动,因此此快捷方式将不再正常工作。”是否有 python 代码可用于检测此类快捷方式是否不再有效
我有一个名为 Siemens NX 的程序的多个版本。 NX 使用环境变量进行配置。我需要 NX 10.0 使用一组与使用系统环境变量的 NX 7.5 不同的环境变量。因此,我编写了一个批处理文件来设
我有一个打开 *.postfix 文件的 c# 程序。 如果用户运行指向我的文件类型的 (.lnk) 快捷方式,我的程序将打开目标。 那么,我的程序怎么知道它是由 (.lnk) 快捷方式启动的(并获取
我是一名优秀的程序员,十分优秀!