我想要的是,根据the documentation,只需使用以下代码:

#include <sodium.h>
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>

int main(void)
{
    if (sodium_init() == -1) {
        return 1;
    }
    printf("Random data: %"PRIu32"\n", randombytes_random()); //returns a uint32_t piece of random data
    return 0;
}


在文档的Windows的installation section中,它声明了MinGW32的预编译Windows版本。当我将代码块与MinGW一起使用时,我发现它们应该可以工作。

我下载了libsodium-1.0.13-mingw.tar.gz文件并将其解压缩。我将libsodium-win32文件夹中的所有内容都放入了MinGW根目录C:\Program Files (x86)\CodeBlocks\MinGW中(文件夹includebinlib也匹配,这使我相信这是正确的选择)。

然后,使用上面的代码段在代码块中创建一个新项目,并使用-std = c99进行编译(尽管-std = gnu99没什么不同),并得到以下警告:

*filepath*\testsodium\main.c  8    undefined reference to 'sodium_init'
*filepath*\testsodium\main.c  11   undefined reference to 'randombytes_random'


这向我表明,由于某种原因,它找不到或实际上没有包含<sodium.h>。奇怪的是,如果我只使用sodium_init()(不检查if语句中的输出),则会给我警告:

*filepath*\testsodium\main.c  8     warning: ignoring return value of 'sodium_init', declared with attribute warn_unused_result [-Wunused-result]


这向我表明它确实得到了解析,因为它注意到缺乏检查结果的能力。检查构建日志,我发现mingw32-gcc.exe引发-Wunused-result警告,而mingw32-g++引发错误。

-------------- Build: Debug in testsodium (compiler: GNU GCC Compiler)---------------

mingw32-gcc.exe -Wall -g -Wall -std=c99  -c
*filepath*\testsodium\main.c -o obj\Debug\main.o
*filepath*\testsodium\main.c: In function 'main':
*filepath*\testsodium\main.c:8:5: warning: ignoring return value of 'sodium_init', declared with attribute warn_unused_result [-Wunused-result]
 sodium_init();
 ^
mingw32-g++.exe  -o bin\Debug\testsodium.exe obj\Debug\main.o
obj\Debug\main.o: In function `main':

*filepath*/testsodium/main.c:8: undefined reference to `sodium_init'
*filepath*/testsodium/main.c:9: undefined reference to `sodium_init'
*filepath*/testsodium/main.c:12: undefined reference to `randombytes_random'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 0 second(s))
4 error(s), 1 warning(s) (0 minute(s), 0 second(s))




有人可以帮我弄清楚如何使钠在我的装置上工作吗?

最佳答案

在代码块上,无论在哪里,都必须链接库。
1)您必须精确确定包含文件的位置。
2)lib文件在哪里(我认为mgw以.a结尾)
如果我没记错,您可以这样做:
Project>Build Option>Linker
在以下帖子https://stackoverflow.com/a/23050127/7850639中,您可以找到更完整的答案

关于c - 无法获得libsodium预制库以使mingw窗口正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45485868/

10-11 20:54