链接头文件的未知类型名称BOOL编译错误

时间:2016-03-28 04:30:59

标签: c linker boolean

我正在为我的一个C项目使用HTParse.c模块。但是在使用

进行编译时
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);
         ^

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

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

在安装库时可能出现问题吗?在制作时我没有看到任何可疑的内容,但是在'sudo make install'结束时我注意到了一些错误......

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。

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

非常感谢!

1 个答案:

答案 0 :(得分:1)

此编译器错误的原因是w3c-libwww定义了BOOL 在标题wwwsys.h中,您不是#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失败,因为库无法链接

当我尝试构建the package时, 在Ubuntu 15.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

毫无疑问,这也是你所看到的。你必须考虑到联系失败 您正在尝试构建的库或可执行文件,而不仅仅是&#34;可疑的&#34;但完全是致命的。 在您链接之前,您没有库。

底线:这个(14年)包在Ubuntu 15.10上打破。没有 似乎是一个众所周知的解决方案。我建议你减少损失。