CS107 作业文件无法编译,缺少 expat.h 和 thread_107.h 文件

标签 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 = -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) 的错误消息:

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  -o rss-news-search
rss-news-search.o: In function `main':
/home/h/cs107/assn-6-rss-news-search/rss-news-search.c:109: undefined reference to `InitThreadPackage'
collect2: ld returned 1 exit status
make: *** [rss-news-search] Error 1

在后一种情况下,如果我注释掉“InitThreadPackage”,它就可以正常编译。

最佳答案

这是编译项目的过程:

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

    /* Empty header file */

  2. 复制librssnews.a来自assn-6-rss-news-search-lib/linux/assn-6-rss-news-search/

  3. 修改文件rss-news-search.c通过注释对函数的调用:InitThreadPackage在线109:

    //InitThreadPackage(false);

  4. 修改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)

然后:

make clean
make

编辑:

当您收到此错误时cannot find lthread_107_linux ,编辑您的 Makefile 以删除此 $(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)

关于CS107 作业文件无法编译,缺少 expat.h 和 thread_107.h 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11925352/

相关文章:

c++ - 如何用 C 或 C++ 计算文件的哈希值?

同步 LinkedList 中的 java.util.NoSuchElementException

java - 同步和可见性

PHP XML Expat 解析器 : how to read only part of the XML document?

c++ - 使用 expat startelement 处理程序 C++

c - 我怎样才能得到 Markdown 来正确格式化这段代码?

c - 这个shellcode是什么意思?

c++ - 64 位 libjingle 无法解析登录 XML 并出现 expat 错误 : ERROR_INVALID_TOKEN

c - 在结构中匹配和搜索并标记 true 或 false C

java - 如何等待线程和处理程序初始化