使用 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 PHP将私钥存储在文件中

在 PHP 7.1 中安装 libsodium 时出错

Debian 9 安装 libsodium

libsodium引用报错FileNotFoundError: [Errno 2] No such file or directory: b‘liblibsodium.a‘

CentOS 7.3 安装 libsodium 1.0.18