2016-03-28 39 views
0

我为我的C项目之一使用HTParse.c模块。然而,随着未知类型名BOOL编译链接头文件错误

gcc -o project project.c -lpthread 

编译时我收到以下编译器错误在头文件中:

In file included from Gserve.c:12:0: 
    /usr/local/include/w3c-libwww/HTParse.h:117:8: error: unknown type name ‘BOOL’ 
    extern BOOL HTURL_isAbsolute (const char * url); 
     ^
    /usr/local/include/w3c-libwww/HTParse.h:192:8: error: unknown type name ‘BOOL’ 
    extern BOOL HTCleanTelnetString (char * str); 
     ^

我已阅读,包括与C99 stdbool.h和C90不支持布尔数据类型。即使包含此标题后,错误仍然存​​在。我已经包括这些标头如下:

#include<stdbool.h> 
#include<w3c-libwww/HTParse.h> 

在安装库期间可能出现了问题吗?然而,让我什么也没看见在可疑我没有在年底出现某些错误“须藤使安装” ......

collect2: error: ld returned 1 exit status 
Makefile:660: recipe for target 'libapp_2' failed 
make[2]: *** [libapp_2] Error 1 
make[2]: Leaving directory '/usr/local/src/w3c-libwww-  5.4.0/Library/Examples' 
Makefile:174: recipe for target 'install-recursive' failed 
make[1]: *** [install-recursive] Error 1 
make[1]: Leaving directory '/usr/local/src/w3c-libwww-5.4.0/Library' 
Makefile:263: recipe for target 'install-recursive' failed 
make: *** [install-recursive] Error 1 

我使用Ubuntu的15.10。

你们有什么想法解决这个问题吗?

非常感谢!

+0

“我已经阅读包含与C99的stdbool.h,并且C90不支持布尔数据类型” - 嗯,'BOOL'来自*既不*。它通常是一个在* Windows *头部定义为“int”的宏,或者在非Windows平台上编译的兼容头。看来你有* *既*。 – WhozCraig

+0

在引用这些引号之前是否还有其他#include指令?你能编译一个只包含'#include '的文件吗? –

回答

1

此编译器错误的原因是w3c-libwww在头wwwsys.h定义BOOL ,你是不是#include荷兰国际集团,或任何 其他w3c-libwww头已经#include这样。图书馆的 API样板旨在通过声明:

#include <w3c-libwww/WWWLib.h> 

先天下之忧。通过 the online documentation或包中的Library/Examples文件夹查看提供的示例。

但是,更正此错误不会让您编译并链接 程序与库,因为您尚未成功构建 并安装该库。

您从sudo make install注意到的故障意味着您还没有 安装了库。但有问题的错误:

collect2: error: ld returned 1 exit status 
Makefile:660: recipe for target 'libapp_2' failed 

不安装库及其头他们 目标目录的错误:它说,图书馆的联动失败。

make install,因此,试图make库,因为它会一直做,只要图书馆有 尚未建成,而make失败,因为库不能链接

当我尝试自己在Ubuntu 15上构建the package, 。10,./configure成功,但make失败:

gcc -g -O2 -Wall -o .libs/libapp_2 libapp_2.o ../src/.libs/libwwwinit.so ../src/.libs/libwwwapp.so ../../Library/src/.libs/libwwwxml.so ../../modules/expat/xmlparse/.libs/libxmlparse.so ../../modules/expat/xmltok/.libs/libxmltok.so ../src/.libs/libwwwhtml.so ../src/.libs/libwwwtelnet.so ../src/.libs/libwwwnews.so ../src/.libs/libwwwhttp.so ../src/.libs/libwwwmime.so ../src/.libs/libwwwgopher.so ../src/.libs/libwwwftp.so ../src/.libs/libwwwdir.so ../src/.libs/libwwwcache.so ../src/.libs/libwwwstream.so ../src/.libs/libwwwfile.so ../src/.libs/libwwwmux.so ../src/.libs/libwwwtrans.so ../src/.libs/libwwwcore.so ../src/.libs/libwwwutils.so -lm ../../modules/md5/.libs/libmd5.so -ldl -Wl,--rpath -Wl,/home/imk/develop/w3c/lib 
../src/.libs/libwwwfile.so: undefined reference to `HTDir_addElement' 
../src/.libs/libwwwfile.so: undefined reference to `HTDir_free' 
../src/.libs/libwwwfile.so: undefined reference to `HTDir_new' 
collect2: error: ld returned 1 exit status 
Makefile:660: recipe for target 'libapp_2' failed 

毫无疑问,这是你看到过。您必须将您试图构建的库或可执行文件的链接失败视为不仅“可疑”,而且完全致命。 直到你链接它,你没有库。底线:这个(14年)的软件包在Ubuntu 15.10上坏了。没有 似乎是一个众所周知的修复程序。我建议你减少你的损失。

+0

非常感谢您的回复!除了为我节省了几个小时的头痛之外,你明确地清除了我对图书馆的一些困惑。如果你有时间,有几个问题:以前,我认为'make'指令是为了编译库的来源,你为什么一直在讨论'make'导致_linkage_失败?回到'make'输出后,我确实注意到了一些编译器**警告**,但没有一个是实际错误。在另一个说明中,如果这个库对我来说不是一个选项,你会有解析C中的一个URL的建议吗? – Lamar

+0

@Lamar一个makefile文件通常但不一定描述为用于构造可执行文件的完整配方 ,其源代码如下: 表格关系:*如果项目A相对于 项目B已过期,C ...从中制作出来,然后通过X,Y,Z ... *重新制作。 这个配方主要涉及*编译*源文件到 目标文件,然后*链接*指定的目标文件或 默认库,使可执行文件。如果您不明白链接器的作用,则在尝试运行之前尝试运行:更好地研究它。 –

+0

@Lamar至于替代库,我不能个人推荐一个,但 [this](http://stackoverflow.com/q/2616011/1362568)和[this](http://stackoverflow.com/q/ 726122/1362568) 可能会有所帮助。 –