如何在Qt Creator中将Argon2库与cmake链接
How to link Argon2 library with cmake in Qt Creator
我想在我的C++应用程序中使用密码哈希函数Argon2。但是如果我构建应用程序,我会收到一个错误:
error while loading shared libraries: libargon2.so.0: cannot open shared object file: No such file or directory
到目前为止,我做了什么:我将源代码下载到Qt项目文件夹(第三方>Argon2)的子文件夹中。打电话给make
来构建氩气.so,并与make test
核实一切正常。项目结构如下所示:
testproject > CMakeLists.txt
testproject > application > test > impl > src > Main.cpp
testproject > thirdparty > Argon2 > include > argon2.h
testproject > thirdparty > Argon2 > libargon2.so
在我的CMakeLists中,我添加了Argon包含路径并尝试链接到.so文件:
find_library(Argon2 NAMES libargon2 PATHS ${CMAKE_SOURCE_DIR}/thirdparty/Argon2)
# Additional include directories
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}
${CMAKE_SOURCE_DIR}/thirdparty/Argon2/include
target_link_libraries(${COMPONENT_NAME} ${Argon2})
但是这个简单的测试程序会给我上面提到的错误。
#include "argon2.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define HASHLEN 32
#define SALTLEN 16
#define PWD "password"
int main(){
uint8_t hash1[HASHLEN];
uint8_t salt[SALTLEN];
memset( salt, 0x00, SALTLEN );
uint8_t *pwd = (uint8_t *)strdup(PWD);
uint32_t pwdlen = strlen((char *)pwd);
uint32_t t_cost = 2; // 1-pass computation
uint32_t m_cost = (1<<16); // 64 mebibytes memory usage
uint32_t parallelism = 1; // number of threads and lanes
argon2i_hash_raw(t_cost, m_cost, parallelism, pwd, pwdlen, salt, SALTLEN, hash1, HASHLEN);
}
我对C++和CMake仍然很陌生,所以我不知道我的程序是否正确(显然不是,因为它不起作用)。
- 是否可以仅链接 .so 文件?
- 我是否必须在我的项目中包含氩气库的整个目录(就像我尝试的那样)?
- 告诉我的链接器如何正确查找库的必要步骤是什么?
编辑
这篇文章似乎与我的相似。但是我无法弄清楚他们的答案是否 .so 文件足够,以及如何链接到我的 debian 系统的软件包管理器未安装的库。
对我有用的是下载存储库并在其中运行 make
命令。这应该创建静态库libargon2.a
。然后在您的 CMakeList 中.txt添加
include_directories(libs/argon2/include)
link_directories(libs/argon2)
add_executable(${PROJECT_NAME} src/main.cpp)
target_link_libraries(${PROJECT_NAME} argon2)
其中libs/argon2
表示下载的存储库的相对路径。
在我目录中的项目project/
我已经将 Argon2 克隆到带有CMakeLists.txt
的project/argon2/
...
target_include_directories(target PUBLIC argon2/include)
target_link_libraries(target argon2)
在代码中,我通过 #include <argon2.h>
包含 Argon2,它对我有用。
相关文章:
- 无法将 GLFW 库与 Ubuntu 18.04 上的头文件链接
- 无法在Ubuntu上将共享库与Eclipse链接
- 为什么构建目录中新构建的共享库与安装目录中的副本具有不同的依赖项集?
- 使用静态库与 std::jthread (g++-10) 的分段错误
- 不能将C++的"std::filesystem"库与介子构建一起使用
- 如果包含映射的静态库与可执行文件和动态库链接,静态映射(变量)是否会被多次释放?
- 将预编译的 C 共享库与 JNI/NDK 结合使用
- 如何将 PhysX 库与 Xcode 链接
- NDK 将库与 cmake 链接
- 无法将提升库与 CMake 链接
- 强制链接静态库与 cmake 不起作用
- 矛盾的未解决的外部符号+未使用的库与VS2017和FFMPEG 4
- 如何在应用程序子项目中将静态库与gradle子项目链接起来
- 如何将动态链接库与CMake一起使用
- 如何将英特尔的数学函数库与 gcc 一起使用?
- 将外部C++库与 CMake 一起使用时出错
- 不同的数学符号绑定与共享库与 dlopen 并直接链接到可执行文件 (Linux)
- 将我的主输出库与测试可执行文件链接时出现问题
- Ogre 3D共享库与CMAKE链接时,在Linux上执行二进制时找不到
- 如何在Qt Creator中将Argon2库与cmake链接