CS107分配文件无法';t编译,缺少expat.h和thread_107.h文件

CS107分配文件无法';t编译,缺少expat.h和thread_107.h文件,c,multithreading,expat-parser,C,Multithreading,Expat Parser,我在斯坦福在线审计cs107 我遇到的问题是作业6,当我在终端中键入“make”时,会弹出错误消息。基本上,我错过了两个头文件,我想可以从预编译的.lib文件中获得。但不知怎么的,它就是不起作用 以下是原始make文件的一部分: CFLAGS = -D_REENTRANT -g -Wall -D__ostype_is_$(OSTYPE)__ -std=gnu99 -I/usr/class/cs107/include/ -Wno-unused-function $(DFLAG) LDFLAGS =

我在斯坦福在线审计cs107

我遇到的问题是作业6,当我在终端中键入“make”时,会弹出错误消息。基本上,我错过了两个头文件,我想可以从预编译的.lib文件中获得。但不知怎么的,它就是不起作用

以下是原始make文件的一部分:

CFLAGS = -D_REENTRANT -g -Wall -D__ostype_is_$(OSTYPE)__ -std=gnu99 -I/usr/class/cs107/include/ -Wno-unused-function $(DFLAG)
LDFLAGS = -L/usr/class/cs107/assignments/assn-6-rss-news-search-lib/$(OSTYPE) -L/usr/class/cs107/lib -lexpat -lrssnews $(PLATFORM_LIBS) $(THREAD_LIBS)
PFLAGS= -linker=/usr/pubsw/bin/ld -best-effort -threads=yes -max-threads=1000
编辑:

当我说“这应该在没有线程实现的情况下编译”时,我的意思是它应该在没有学生进一步线程实现的情况下编译

下面是线程的错误消息:

gcc -D_REENTRANT -g -Wall -D__ostype_is_linux__ -std=gnu99 -I/usr/class/cs107/include/ -Wno-unused-function -c -o rss-news-search.o rss-news-search.c
rss-news-search.c: In function ‘main’:
rss-news-search.c:109:3: warning: implicit declaration of function ‘InitThreadPackage’ [-Wimplicit-function-declaration]
gcc rss-news-search.o -D_REENTRANT -g -Wall -D__ostype_is_linux__ -std=gnu99 -I/usr/class/cs107/include/ -Wno-unused-function -L/home/h/cs107/assn-6-rss-news-search-lib/linux -L/usr/class/cs107/lib -L. -lexpat -lrssnews -lnsl -lpthread -lthread_107_linux -o rss-news-search
/usr/bin/ld: cannot find -lthread_107_linux
collect2: ld returned 1 exit status
make: *** [rss-news-search] Error 1
以下是不带$(THREAD_LIBS)的错误消息:


在后一种情况下,如果我注释掉“InitThreadPackage”,它编译得很好。

特定于类的头文件,如
thread_107.h
可以在
/usr/class/cs107/include/
中找到,在讲师希望学生使用的任何机器上都可以找到。如果你不使用那台机器,你将不得不复制那些包含文件或自己制作


expat.h
文件来自开源库。您需要在正在编译的系统上安装相应的软件包。在Ubuntu上,这是
sudo apt get install libexpat1 dev
,但在其他发行版上,包名应该类似。

以下是编译项目的过程:

  • 创建一个文件
    assn-6-rss-news-search/thread_107.h
    ,并将其放入:

    /*空头文件*/

  • 将库
    librssnews.a
    assn-6-rss-news-search-lib/linux/
    复制到
    assn-6-rss-news-search/

  • 通过注释在线109上调用函数:
    InitThreadPackage
    修改文件
    rss news search.c

    LDFLAGS = -L/usr/class/cs107/assignments/assn-6-rss-news-search-lib/$(OSTYPE) -L/usr/class/cs107/lib -L. -lexpat -lrssnews $(PLATFORM_LIBS)
    
    //初始化线程包(假)

  • 修改
    Makefile
    以包含当前目录的路径(以便能够链接到您先前复制的库
    librssnews.a
    ):

  • 第27行应如下所示:

    LDFLAGS = -L/usr/class/cs107/assignments/assn-6-rss-news-search-lib/$(OSTYPE) -L/usr/class/cs107/lib -L. -lexpat -lrssnews $(PLATFORM_LIBS) $(THREAD_LIBS)
    
    然后:

    编辑:

    出现此错误时,请编辑生成文件以删除第27行中的此
    $(线程库)

    LDFLAGS = -L/usr/class/cs107/assignments/assn-6-rss-news-search-lib/$(OSTYPE) -L/usr/class/cs107/lib -L. -lexpat -lrssnews $(PLATFORM_LIBS)
    

    发布makefile或指向分配资源的一些链接。我们没有足够的信息来帮助您。您好,谢谢您的评论。可以在此处找到分配文件,其中包括make文件。这是作业6。谢谢,链接是:?是的。那个包含一个make文件。它下面的那个有.lib文件。谢谢!卡尔。我想我能找到外籍人士。但是我如何制作自己的线程?很抱歉,我还是cs新手。您只需创建一个同名文件,当编译器抱怨未知函数时,您会在其中添加一个匹配的函数声明。现在它会提示“找不到lexpat”和“找不到lthread_107_linux”。正如Karl所说,如果您使用Ubuntu安装libexpat(sudo apt get install libexpat1 dev)干杯~~第一个已经走了~~~还有一个~~耶!谢谢,它也不见了。但一旦我在rss新闻搜索中的第109行带回InitThreadPackage.c。另一个说它是未定义的。作业6是关于多线程的。如果没有$(线程库),整个任务将无法完成。对不起,我不明白!我们在这里讨论的是assn-6-rss-news-search,里面除了第109行之外没有线程,我告诉您对它进行评论。你在尝试另一个项目还是什么?
    LDFLAGS = -L/usr/class/cs107/assignments/assn-6-rss-news-search-lib/$(OSTYPE) -L/usr/class/cs107/lib -L. -lexpat -lrssnews $(PLATFORM_LIBS)