Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中包含一个外部库_C_Cs50 - Fatal编程技术网

在C语言中包含一个外部库

在C语言中包含一个外部库,c,cs50,C,Cs50,我正在尝试使用一个C库来学习哈佛大学的开放式课程。可以找到讲师关于设置外部库的说明 当我试图在我的ubuntu盒上使用这个lib时,我遵循ubuntu的特定说明。我按照页面上的说明进行了设置,但是当我使用cs50库函数运行一个简单的helloWorld.c程序时,gcc不想执行 例如: helloWorld.c 我严格按照说明书中的说明去做,但它们对我不起作用。我正在运行ubuntu 12.04。如果我能进一步澄清我的问题,请告诉我。在编译过程中,您需要链接库。如果你在Ubuntu上,库应该以.

我正在尝试使用一个C库来学习哈佛大学的开放式课程。可以找到讲师关于设置外部库的说明

当我试图在我的ubuntu盒上使用这个lib时,我遵循ubuntu的特定说明。我按照页面上的说明进行了设置,但是当我使用cs50库函数运行一个简单的
helloWorld.c
程序时,gcc不想执行

例如:

helloWorld.c


我严格按照说明书中的说明去做,但它们对我不起作用。我正在运行ubuntu 12.04。如果我能进一步澄清我的问题,请告诉我。

在编译过程中,您需要链接库。如果你在Ubuntu上,库应该以.a或.so结尾。要链接到库,请执行以下操作:

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

首先,作为初学者,您应该始终要求GCC编译时启用所有警告和调试信息,即
GCC-Wall-g
。但有时也会阅读。使用一个好的工具(例如or等)来编辑您的C源代码,但要能够在命令行上编译您的程序(因此不要总是使用复杂的工具来隐藏重要的编译细节)

然后,您可能缺少一些哈佛特定的库,一些选项,如
-L
,后跟库目录,然后粘贴到库名称上。因此,您可能需要
gcc-Wall-g-lcs50
(用适当的名称替换
cs50
),您可能需要一些
-L
一些目录

请注意,
gcc
的程序参数顺序非常重要。一般来说,如果
a
依赖于
b
,则应将
a
放在
b
之前;更具体地说,我建议

  • gcc
    程序名开始;如果需要,添加C标准等级eg
    -std=c99
  • 放置编译器警告、调试(或优化)选项,例如
    -Wall-g
    (您甚至可能需要添加
    -Wextra
    以获得更多警告)
  • 放入预处理器的定义和包含目录,例如
    -DONE=1
    -Imy include dir/
  • 将您的C源文件放入hello.C
  • 放置与之链接的任何对象文件,即
    bar.o
  • 如果相关,请放入库目录
    -Lmy lib dir/
  • Pur库名
    -laa
    -lbb
    (当
    libaa.so
    依赖于
    libbb.so
    时,按该顺序)
  • -o程序名
    结束,给出生成的二进制文件的名称。不要使用默认名称
    a.out
  • 对于库,可以多次提供目录给定选项
    -I
    (对于预处理器包括)和
    -L
    ,顺序非常重要(搜索顺序)

    很快,您就会希望使用以下工具(可能是Linux上的)

    也要学会学习

    养成经常向编译器询问警告的习惯,不断改进你的程序,直到没有警告为止:编译器是你的朋友,它在帮助你

    还可以阅读《名人录》(这本书教授非常重要的概念;你可能想在阅读时了解更多)。还要注意以下工具:


    玩得开心。

    你必须链接到库,GCC怎么知道你要使用哪个库

    gcc helloWorld.c -lcs50
    
  • 从以下站点下载cs50:
  • 把它取出来。(您将获得两个文件cs50.c和cs50.h)
  • 现在将这两个文件复制到默认的库文件夹中。(其中包括stdio.h文件)
  • 现在在编写程序时使用:#include
  • 您还可以将这些文件复制到包含helloWorld.c文件的文件夹中
  • 您必须使用:#包括“cs50.c”
  • 或=========================================================================================>

  • 在文本编辑器中打开cs50.c和cs50.h文件
  • 在cs50.h中,在新行的#include下面添加#include和#include
  • 现在打开cs50.c文件,复制所有内容(from://**从标准输入中读取一行文本,并返回等价的{from line 47 to last}),然后将其粘贴到cs50.h中#endif的正上方并保存文件
  • 现在,您可以将文件cs50.h复制到默认库文件夹或当前工作文件夹中
  • 如果将文件复制到默认文件夹,则使用:#include;如果将文件复制到当前工作文件夹,则使用:#include“cs50.h”
  • 如果你需要帮助,可以随时找我faizan4427@gmail.com如果这有效,请投票


    祝你一切顺利

    我参加了这门课程,有时我需要在旅行或通勤时离线练习。在Windows下,使用MinGW和Notepad++作为IDE(因为我喜欢它,并且通常在编写python时使用它),我终于找到了一个解决方案,并花了一些时间将其写下来

    从头开始。设置gcc C编译器的步骤,如果已经设置,请跳到5

  • 安装。它包括Git Bash,它是MINGW64 linux终端。我更喜欢使用Git,因为我需要linux工具,比如我的Windows上的sed、awk、pull和push,并且可以取代Guthub的终端
  • 一旦安装了Git,请确保安装了gcc包。您可以使用我的配置作为参考
  • 确保编译器正常工作。扔掉这个简单的代码

    • 将其保存在您的工作目录Documents/Harvard_CS50/Week2中/ hello.c

    包含的头文件只是标记函数的原型。因此,您的文件编译良好,但存在链接错误。您是否按照建议安装了库?如果是这样的话,您能检查一下库是否正确安装,路径变量是否正确设置,以便gcc可以使用路径找到这些库吗?gcc helloWorld.c-lcs50是否有效?是的,我没有意识到我有
    gcc -o myProgram myProgram.c -l(library name goes here but no parentheses)
    
    gcc helloWorld.c -lcs50
    
    #include <stdio.h>
    
    int main(void)
    {
     printf("Hello StackOverflow\n");
    }
    
    #include <stdio.h>
    #include <cs50.h>
    
    int main(void) 
    {
        printf("Please input a string to count how long it is: ");
        string s = get_string();
        int n = 0;
        while (s[n] != '\0')
            {
                n++;
            }
        printf("Your string is %i chars long\n", n); 
    }
    
    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"