2016-03-28 289 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) 可能會有所幫助。 –