无法获得libsodium预建库MinGW的窗口工作

问题描述:

我要的是,按照the documentation,只要使用此代码:无法获得libsodium预建库MinGW的窗口工作

#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的文档的窗口,它指出了预编译的Windows版本为MinGW32。由于我在MinGW中使用了代码块,我认为这些应该可以工作。

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

我再从上面建立一个新的项目与代码段的代码块,并用-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

你不*链接*与实际库。在Code :: Blocks的项目设置中,应该有一个包含liker设置的选项卡或类似选项。在它你需要添加实际的库。只包括头文件是不够的。 –

+0

连接这个库的语法是什么?我似乎无法在文档中找到它。 – realbananas

在代码块中,您必须将库连接到哪里。 1)您必须确定包含文件在哪里。 2)如果是的lib文件(.A在MGW结束,我认为) 如果我没记错的话,你这样做,在: Project>Build Option>Linker
一个更完整的答案是在下面的帖子https://*.com/a/23050127/7850639

+0

好的,我找到了“链接库”,并在其中包含了.a。我怎么做1)?如:在哪里以及如何“精确确定包含文件的位置”? 我认为这必须在“其他链接器选项”字段中完成,但我不知道该语法,并且似乎无法在线找到它。 现在,当我建立一个“未定义的引用'SystemFunction036 @ 8'”,可能是因为它找到了功能链接,但不是实际的功能本身或东西。 – realbananas

+0

要添加包含文件,您需要将它们添加到项目中(左侧的选项卡对我来说可能已移动了1天)。你有你的项目和2/3文件夹:源代码,标题,其他(如果你有图片),你需要在那里添加你的文件。要做到这一点,你右键点击它(项目),并添加文件或类似的东西。我不知道你的新错误会在今天晚上发现。 –

+0

但是这应该是一个基本的库,因此我们使用而不是某种形式的相对路径“sodium.h”。它应该自动包含要构建的文件,因为它应该是(成为)本地mingw库。 – realbananas