我想要的是,根据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;
}
在文档的installation section窗口中,它说明了MinGW32的预编译Windows版本。当我使用MinGW的代码块时,我认为那些应该有用。
我下载了libsodium-1.0.13-mingw.tar.gz
文件并将其解压缩。我获取了libsodium-win32
文件夹的所有内容,并将它们放入MinGW根C:\Program Files (x86)\CodeBlocks\MinGW
(文件夹include
,bin
和lib
也匹配,让我相信这是正确的方法)。
然后我使用上面的代码片段在codeblocks中创建一个新项目,并使用-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))
有人可以帮我弄清楚如何让钠在我的设置上工作吗?
答案 0 :(得分:0)
在代码块上,您必须将库链接到原来的位置。
1)您必须精确包含文件的位置。
2)lib文件在哪里(我认为mgw以.a结尾)
如果我没记错的话你会这样做:
Project>Build Option>Linker
以下帖子中提供了更完整的答案https://stackoverflow.com/a/23050127/7850639