簡體   English   中英

無法獲得libsodium預制庫以使mingw窗口正常工作

[英]Can't get libsodium pre-built library for mingw windows to work

我想要的是,根據文檔 ,只需使用以下代碼:

#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 安裝部分中,它聲明了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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM