使用 libsodium 构建一个简单的项目 [重复]
Posted
技术标签:
【中文标题】使用 libsodium 构建一个简单的项目 [重复]【英文标题】:Build a simple project using libsodium [duplicate] 【发布时间】:2015-04-10 08:41:30 【问题描述】:我创建了一个使用 libsodium 的非常简单的 Qt 项目。 (我可以创建一个相同的项目并使用 Visual Studio 2010/2013 构建良好。)但 Qt Creator 无法构建:
main.obj:-1: error: LNK2019: unresolved external symbol sodium_init 在 main 函数中引用
这是我的项目:
testSodium.pro:
QT += core
QT -= gui
TARGET = testSodium
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
DEFINES += SODIUM_STATIC
INCLUDEPATH += F:/libsodium-1.0.2-msvc/include
LIBS += -LF:/libsodium-1.0.2-msvc/Win32/Release/v120/static/ -llibsodium
SOURCES += main.cpp
main.cpp:
#include <sodium.h>
int main(int argc, char *argv[])
if (sodium_init() == -1)
return 1;
谁能帮帮我?
(我使用的是 Qt Creator 3.3.1、Qt 5.4.1 MSVC 2010 32 位) 库钠:https://download.libsodium.org/libsodium/releases/libsodium-1.0.2-msvc.zip
【问题讨论】:
你在这个目录中实际构建了 libsodium.a 吗?尝试在 pro 文件中更改为 -llibsodium.a 我正在使用 MSVC。 .a 是用于 mingw 或 linux 的,对吗? 你的 dll 的实际名称是什么? @aviit 我刚刚构建它没有任何问题,使用 Qt Creator 3.1.1,Qt 5.3.0 MSVC 2010 32 位。 (imgur.com/RBMjmvC) @aviit Qt 版本无关紧要。相反,编译器版本才是重点。请确保您的 Qt 和 libsodium 库是使用相同版本的编译器(MSVC 2010 或 2013)构建的。例如,如果您使用 MSVC2013 编译 Qt-MSVC2013 和 libsodium-MSVC2010,可能会出现不兼容(我猜是因为它可以在我的机器上运行) 【参考方案1】:其实libsodium
是一个纯C写的库。
这意味着如果你想将它导入到 C++ 项目中,你必须添加一个 extern "C"
标识符。
所以你应该像这样包含头文件:
#ifdef __cplusplus
extern "C"
#endif
#include <sodium.h>
#ifdef __cplusplus
#endif
【讨论】:
是 C 库的标准做法,其他人将使用它在自己的标题上执行此操作。它使其他程序员每次想从 C++ 程序调用 C 库时都不必自己这样做。以上是关于使用 libsodium 构建一个简单的项目 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何将libsodium私钥转换为OpenPGP兼容的私钥包?
libsodium引用报错FileNotFoundError: [Errno 2] No such file or directory: b‘liblibsodium.a‘