2017-08-03 20 views
0

を動作するようにmingwのウィンドウのlibsodium事前に構築されたライブラリーを取得できませんthe documentationあたりとして、である、ちょうどこのコードを使用:ドキュメントのウィンドウのinstallation sectionは、私が欲しいもの

#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; 
} 

を、それが述べ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>を含んでいないことを示しています。どのような奇妙なのは、私はちょうど(if文で出力をチェックせず)sodium_init()を取るならば、それは私に示す警告を与えることである:それはの欠如に気づくよう、それが実際に解析されますないことを私に示して

*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

次のとおりです。私は記憶が正しけれ場合 )私が思うMGWでは.aで終わるのlibファイル(あるあなたがそれを行う 2)実際のライブラリとのリンク*。 Code :: Blocksのプロジェクト設定のどこかに、好みの設定を含むタブなどが必要です。その中に実際のライブラリを追加する必要があります。ヘッダーファイルだけを含めるだけでは不十分です。 –

+0

このライブラリをリンクする構文は何ですか?私はドキュメントでそれを見つけることができないようです。 – realbananas

答えて

0

コードブロックでは、ライブラリをリンクする必要があります。 1)インクルードファイルの場所を正確に指定する必要があります。 Project>Build Option>Linker
より完全な答えはあなたが*ない次の記事でhttps://stackoverflow.com/a/23050127/7850639

+0

[OK]を、私は "リンクライブラリ"を発見し、そこに.aが含まれています。 1)どうすればいいですか?どこでどのように「インクルードファイルがどこにあるのか」を正確に調べるには? これは「その他のリンカーオプション」フィールドで行う必要があると仮定していますが、構文についての手掛かりはなく、オンラインでは見つからないようです。 ビルド時に「SystemFunction036 @ 8 '」への未定義の参照を取得しました。これはおそらく、リンクされる関数が見つかったためですが、実際の関数自体や何かが見つかりませんでした。 – realbananas

+0

インクルードファイルを追加するには、そのファイルをプロジェクトに追加する必要があります(左側のタブは1日分移動している可能性があります)。そこにあなたのプロジェクトと2/3のフォルダが含まれています:ソース、ヘッダー、その他(画像がある場合)、そこにファイルを追加する必要があります。これを行うには、プロジェクト(プロジェクト)を右クリックしてファイルやそのようなものを追加します。私はあなたの新しいエラーが今晩にわかるのか分かりません。 –

+0

しかし、これは基本的なライブラリでなければなりません。なぜ、を使用し、相対パス "sodium.h"の形式ではないのですか?ネイティブのmingwライブラリになるべきであるため、ビルドするファイルを自動的にインクルードする必要があります。 – realbananas

関連する問題