【问题标题】:CS107 Assignment file couldn't compile, missing expat.h and thread_107.h filesCS107 分配文件无法编译,缺少 expat.h 和 thread_107.h 文件
【发布时间】:2012-08-12 19:47:25
【问题描述】:

我在斯坦福在线审核 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”,它编译得很好。

【问题讨论】:

标签: c multithreading expat-parser


【解决方案1】:

这是编译项目的过程:

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

    /* Empty header file */

  2. 复制librssnews.aassn-6-rss-news-search-lib/linux/assn-6-rss-news-search/

  3. 通过注释对函数的调用修改文件rss-news-search.cInitThreadPackage 在第 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 以删除第 27 行上的此 $(THREAD_LIBS)

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

【讨论】:

  • 现在提示“找不到lexpat”和“找不到lthread_107_linux”。
  • 正如 Karl 所说,如果你在 Ubuntu 上安装 libexpat (sudo apt-get install libexpat1-dev)
  • 干杯~~第一个不见了~~~还有一个去~~耶!
  • 谢谢,它也消失了。但是一旦我在 rss-news-search.c 的第 109 行带回 InitThreadPackage。另一个出现说它是未定义的。作业 6 都是关于多线程的。如果没有 $(THREAD_LIBS),整个分配将无法完成。
  • 对不起,我不明白!我们在这里讨论的是 assn-6-rss-news-search,除了第 109 行,里面没有线程,我告诉你评论它。你是在尝试另一个项目还是什么?
【解决方案2】:

在教师希望学生使用的任何机器上,都可以在 /usr/class/cs107/include/ 中找到特定于班级的头文件,例如 thread_107.h。如果您不使用该机器,则必须复制这些包含文件或自己制作。

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

【讨论】:

  • 谢谢!卡尔。我想我可以得到expat.h。但是我如何制作自己的thread_107.h?对不起,我还是个 cs 新手。
  • 你只需要创建一个具有该名称的文件,当编译器抱怨未知函数时,你就会在其中放置一个匹配的函数声明。
猜你喜欢
  • 2019-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-01
  • 2012-03-03
  • 1970-01-01
  • 2019-07-07
相关资源
最近更新 更多