Inclure une bibliothèque externe en C

J’essaie d’utiliser une bibliothèque C pour un cours d’openourseware de Harvard. Les instructions du formateur pour configurer la bibliothèque externe sont disponibles ici .

Je suis les instructions spécifiques à Ubuntu car j’essaye d’utiliser cette lib sur ma boîte Ubuntu. J’ai suivi les instructions de la page pour la configurer, mais lorsque j’exécute un programme simple helloWorld.c l’aide d’une fonction de bibliothèque cs50, gcc ne veut pas continuer à jouer.

Exemple:

helloWorld.c

 #include  #include  int main(void){ printf("What do you want to say to the world?\n"); ssortingng message = GetSsortingng(); printf("%s!\n\n", message); } 

$ gcc helloWorld.c

 /tmp/ccYilBgA.o: In function `main': helloWorld.c:(.text+0x16): undefined reference to `GetSsortingng' collect2: ld returned 1 exit status 

J’ai suivi les instructions à la lettre comme indiqué dans les instructions, mais elles ne fonctionnaient pas pour moi. Je cours Ubuntu 12.04. S’il vous plaît laissez-moi savoir si je peux clarifier davantage mon problème.

Tout d’abord, en tant que débutant, vous devriez toujours demander à GCC de comstackr avec tous les avertissements et informations de débogage activés, c.-à-d. gcc -Wall -g

Ensuite, il vous manque probablement une bibliothèque spécifique à Harvard, des options telles que -L suivi d’un répertoire de bibliothèque, puis -l collé au nom de la bibliothèque. Donc vous pourriez avoir besoin de gcc -Wall -g -lcs50 (remplacez cs50 par le nom approprié) et vous aurez peut-être besoin de -L

Notez que l’ordre des arguments du programme à gcc est significatif. En règle générale, si a dépend de b vous devez mettre a avant b ; plus spécifiquement je suggère

  1. Commencez par le nom du programme gcc ; ajoutez le niveau standard C , par exemple -std=c99 si vous le souhaitez
  2. Mettez les options d’avertissement, de débogage (ou d’optimisation) du compilateur, par exemple -Wall -g (vous pouvez même vouloir append -Wextra pour obtenir encore plus d’avertissements).
  3. Mettez le répertoire de définition et d’inclusion du préprocesseur, par exemple -DONE=1 et -Imy-include-dir/
  4. Mettez votre fichier source C hello.c
  5. Placez tous les fichiers d’objects avec lesquels vous bar.o lien, c’est-à-dire bar.o
  6. Mettez les répertoires de la bibliothèque -Lmy-lib-dir/ si pertinent
  7. Pur les noms de bibliothèque -laa et -lbb (quand libaa.so dépend de libbb.so , dans cet ordre)
  8. Terminez avec -o your-program-name de -o your-program-name pour donner le nom du binary produit. N’utilisez pas le nom par défaut a.out

Les options de répertoire -I (pour les pré-processeurs inclus) et -L pour les bibliothèques peuvent être données plusieurs fois, l’ordre est important (ordre de recherche).

Très vite, vous voudrez utiliser des outils de construction tels que make

Apprenez aussi à utiliser le débogueur gdb

Prenez l’habitude de toujours demander des avertissements au compilateur et d’améliorer toujours votre programme jusqu’à ne plus recevoir d’avertissements: le compilateur est votre ami, il vous aide!

S’amuser.

Vous devez établir un lien avec la bibliothèque lors de la compilation. La bibliothèque devrait se terminer par .a ou .so si vous êtes sur Ubuntu. Pour créer un lien avec une bibliothèque:

 gcc -o myProgram myProgram.c -l(library name goes here but no parentheses) 

Vous devez établir un lien avec la bibliothèque. Pourquoi GCC sait-il quelle bibliothèque vous souhaitez utiliser?

 gcc helloWorld.c -lcs50 
  1. Téléchargez le fichier cs50 à l’ adresse suivante : http://mirror.cs50.net/library50/c/library50-c-5.zip
  2. Extrait-le. (Vous obtiendrez deux fichiers cs50.c et cs50.h)
  3. Maintenant, copiez les deux fichiers dans votre dossier de bibliothèque par défaut. (qui inclut votre fichier stdio.h)
  4. Maintenant, lors de l’écriture de votre programme, utilisez: #include
  5. Vous pouvez également copier les fichiers dans le dossier contenant votre fichier helloWorld.c.
  6. Vous devez utiliser: #include “cs50.c”.

OU ============================================== ====================>

  1. Ouvrez les fichiers cs50.c et cs50.h dans l’éditeur de texte.
  2. Dans cs50.h, juste en dessous de #include , ajoutez #include et #include sur la nouvelle ligne.
  3. Maintenant, ouvrez le fichier cs50.c, copiez tout (de: / ** Lit une ligne de texte à partir de l’entrée standard et renvoie l’équivalent {de la ligne 47 à la dernière}) et collez-le dans cs50.h juste au-dessus de #endif et enregistrez le des dossiers.
  4. Vous pouvez maintenant copier le fichier cs50.h dans votre dossier de bibliothèque par défaut ou dans votre dossier de travail actuel.
  5. Si vous avez copié le fichier dans le dossier par défaut, utilisez: #include et si vous avez copié les fichiers dans le dossier de travail actuel, utilisez: #include “cs50.h”.

Si vous avez besoin d’aide, vous pouvez me demander à l’adresse faizan4427@gmail.com et si cela a fonctionné, veuillez voter.

Bonne chance!!!

Je prends ce cours et parfois je dois pratiquer hors ligne lorsque je suis en déplacement ou en déplacement. Sous Windows, utilisant MinGW et Notepad ++ comme IDE (parce que je l’aime et que je l’utilise généralement en codding Python), j’ai finalement trouvé une solution et un peu de temps pour l’écrire.

Partir de rien. Étapes pour configurer le compilateur gcc C, s’il est déjà défini, passez à l’étape 5

  1. Téléchargez Git et installez-le. Il comprend Git Bash, qui est le terminal linux MINGW64. Je préfère utiliser Git car j’ai besoin d’outils Linux tels que sed, awk, pull, push sur Windows et que je puisse remplacer le terminal de Guthub.
  2. Une fois que Git est installé, assurez-vous que les paquets gcc sont installés. Vous pouvez utiliser ma configuration pour référence … Gestionnaire d'installation MinGW - gcc
  3. Assurez-vous que votre compilateur fonctionne. Jetez ce code simple,

    • en l’enregistrant dans votre répertoire de travail Documents / Harvard_CS50 / Week2 / hello.c
     #include  int main(void) { printf("Hello StackOverflow\n"); } 
    • démarrer Git Bash -> naviguer dans le répertoire de travail

    cd Documents / Harvard_CS50 / Week2 /

    • comstackr en terminal bash

    gcc helloworld.c -o helloworld.exe

    • l’exécuter en utilisant le terminal bash

    ./helloworld.exe

    Bonjour StackOverflow

    1. Si vous voyez Hello StackOverflow , votre compilateur fonctionne et vous pouvez écrire du code C.

Passons maintenant au bit important: installer la bibliothèque CS50 localement et l’utiliser hors ligne. Ceci devrait être applicable à toutes les autres bibliothèques introduites plus tard dans le cours.

  1. Téléchargez le dernier fichier de code source cs50.c et le fichier d’entête cs50.h à l’ adresse https://github.com/cs50/libcs50/tree/develop/src et enregistrez-les dans Documents / Harvard_CS50 / src.

  2. Naviguez dans le répertoire src et listez les fichiers pour vous assurer que vous êtes au bon endroit en utilisant

    ls

    cs50.c cs50.h

  3. Cool, nous sums ici. Maintenant, nous devons comstackr un fichier object pour la bibliothèque en utilisant

    gcc -c -ggdb -std = c99 cs50.c -o cs50.o

  4. Maintenant, en utilisant le fichier object cs50.o généré, nous pouvons créer notre fichier d’archive de bibliothèque cs50.

    ar rcs libcs50.a cs50.o

  5. Après toutes ces étapes, nous avons terminé avec 2 fichiers supplémentaires dans nos fichiers originaux. Nous ne sums intéressés que par 2 d’entre eux cs50.h libcs50.a

    ls

    cs50.c cs50.h cs50.o libcs50.a

  6. Copiez la bibliothèque et les fichiers d’en-tête dans leurs emplacements cibles. Mon MinGW est installé dans C: \ donc je les copie là

    cs50.h -> C: \ MinGW \ include

    libcs50.a -> C: \ MinGW \ lib

Test de la bibliothèque cs50

Pour nous assurer que notre bibliothèque fonctionne, nous pouvons append l’un des scripts d’exemple dans la lecture et voir si nous pouvons le comstackr à l’aide du fichier d’en-tête cs50.h pour la méthode get_ssortingng ().

 #include  #include  int main(void) { printf("Please input a ssortingng to count how long it is: "); ssortingng s = get_ssortingng(); int n = 0; while (s[n] != '\0') { n++; } printf("Your ssortingng is %i chars long\n", n); } 
  1. Comstackz le code cs50 en utilisant les bibliothèques gcc et cs50. Je veux être explicite et utiliser:

    gcc -ggdb -std = c99 -Wall -Werror test.c -lcs50 -o test.exe

    Mais vous pouvez simplement pointer la source, le nom du fichier de sortie et la bibliothèque cs50

    gcc test.c -o test.exe -lcs50

Ici nous allons, le programme est compilé en utilisant un en-tête et des méthodes peuvent être utilisées dans.

Si vous voulez Notepad ++ en tant qu’EDI, vous pouvez suivre cette astuce pour le configurer avec gcc en tant que compilateur et exécuter votre code à partir de là . Assurez-vous simplement que votre script nppexec inclut la bibliothèque cs50

 npp_save gcc -ggdb -std=c99 -Wall -Werror "$(FULL_CURRENT_PATH)" -lcs50 -o "$(CURRENT_DIRECTORY)\$(NAME_PART).exe" cmd /c "$(CURRENT_DIRECTORY)\$(NAME_PART).exe" 

Exécuter du code CS50 dans Notepad ++