2017-08-03 7 views
0

Ce que je veux, comme par the documentation, il suffit d'utiliser ce code:Impossible d'obtenir libsodium bibliothèque pré-construit pour les fenêtres de MinGW pour travailler

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

Dans le installation section pour les fenêtres de la documentation, il affirme la Version Windows précompilée pour MinGW32. Comme j'utilise des blocs de code avec MinGW, j'ai pensé que ceux-ci devraient fonctionner.

J'ai téléchargé le fichier libsodium-1.0.13-mingw.tar.gz et l'ai extrait. J'ai pris tout le contenu du dossier libsodium-win32 et les ai mis dans la racine MinGW C:\Program Files (x86)\CodeBlocks\MinGW (les dossiers include, bin et lib correspondent également, me faisant croire que c'est la bonne façon d'y aller).

je puis faire un nouveau projet dans codeblocks avec l'extrait de code ci-dessus et de compilez avec -std = C99 (bien que std = gnu99 ne fait pas de différence) et obtenir l'avertissement suivant:

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

Ce qui m'indique que pour une raison quelconque ne peut pas trouver ou n'inclut pas réellement le <sodium.h>. Ce qui est étrange est que si je prends juste sodium_init() (sans vérifier la sortie dans un communiqué if), il me donne un avertissement indiquant:

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

Ce qui me indique qu'il ne se fait analysé comme il remarque l'absence de vérifier le résultat. Vérification du journal de construction Je trouve que mingw32-gcc.exe lève l'avertissement -Wunused-result tandis que mingw32-g++ lève l'erreur.

-------------- 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)) 

Quelqu'un peut me aider à comprendre comment obtenir sodium pour travailler sur ma configuration?

+1

Vous n'avez pas * lien * avec la bibliothèque actuelle. Quelque part dans les paramètres du projet de Code :: Blocks, il devrait y avoir un onglet ou similaire qui contient des paramètres liker. Dans celui-ci, vous devez ajouter la bibliothèque actuelle. Il ne suffit pas d'inclure le fichier d'en-tête. –

+0

Quelle est la syntaxe pour lier cette bibliothèque? Je n'arrive pas à le trouver dans la documentation. – realbananas

Répondre

0

Sur les blocs de code, vous devez lier la bibliothèque où qu'elle soit. 1) Vous devez préciser où sont les fichiers include. 2) Où se trouve le fichier lib (se terminant par .a dans MGW je pense) Si je me souviens bien vous faire dans: Project>Build Option>Linker
Une réponse plus complète est dans le post suivant https://stackoverflow.com/a/23050127/7850639

+0

Ok, j'ai trouvé les "bibliothèques de liens" et inclus les .a là. Comment puis-je faire 1)? Comme dans: où et comment puis-je "préciser où sont les fichiers d'inclusion"? Je suppose que cela doit être fait dans le champ "other linker options", mais je n'ai aucune idée de la syntaxe et je n'arrive pas à la trouver en ligne. Maintenant, lors de la construction, je reçois une "référence indéfinie à 'SystemFunction036 @ 8'", probablement parce qu'elle a trouvé les fonctions à lier, mais pas les fonctions elles-mêmes ou quelque chose. – realbananas

+0

Pour ajouter le fichier d'inclusion, vous devez les ajouter au projet (onglet sur la gauche pour moi mais peut l'avoir déplacé 1 jour). Là vous avez votre projet et 2/3 dossiers contenus: source, en-tête, d'autres (si vous avez une image) vous devez y ajouter vos fichiers. Pour ce faire, faites un clic droit dessus (le projet) et ajoutez des fichiers ou quelque chose comme ça. Je ne sais pas si votre nouvelle erreur le découvrira ce soir. –

+0

Mais cela devrait être une bibliothèque de base, d'où la raison pour laquelle nous utilisons et non une forme de chemin relatif "sodium.h".Il devrait inclure automatiquement le fichier à construire car il devrait être (devenir) une bibliothèque native mingw. – realbananas