2016-03-28 29 views
0

私のCプロジェクトの1つにHTParse.cモジュールを使用しています。私はC99とstdbool.hを含めるように読んだ不明な型名BOOLリンクされたヘッダーファイルでコンパイルエラー

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); 
     ^

とC90は、ブールデータ型をサポートしていないこと:

gcc -o project project.c -lpthread 

でコンパイルするときしかし、私はヘッダファイルの中から、次のコンパイラエラーを受け取ります。このヘッダーをインクルードしても、エラーは残ります。私はこれらのヘッダーを次のように含めました。

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

ライブラリのインストール中に何か問題が発生しましたか?しかし作るとき、私はUbuntuの15.10 を使用しています

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 

私は...「make installをsudoを」私はの終わりに多少の誤差が気付かなかったで不審な何も表示されませんでした。

あなたはこれを修正するためのアイデアはありますか?

ありがとうございます!

+0

"C99でstdbool.hをインクルードするように読みましたが、C90はブール型のデータ型をサポートしていません" - BOOLは*から*ではありません。これは、通常、* Windows *ヘッダに 'int'と定義されたマクロ、または非Windowsプラットフォームでコンパイルするための互換性ヘッダです。あなたは*どちらも持っていないようです。 – WhozCraig

+0

引用符の前に他の#include指令がありますか? '#include 'のみからなるファイルをコンパイルできますか? –

答えて

1

このコンパイラエラーの原因は、それが他のw3c-libwwwヘッダ既に#includew3c-libwwwは、ヘッダwwwsys.hBOOL を定義し、あなたが#includeではありません、それをINGのか のいずれかということです。何か他のものの前に

#include <w3c-libwww/WWWLib.h> 

:ライブラリの APIの決まり文句はで宣言することを意図しています。パッケージの 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'命令はライブラリのソースをコンパイルすることを意図していたと思いましたが、どうしてあなたは_linkage_障害を引き起こす 'make'私の 'make'アウトプットに戻った後、私はいくつかのコンパイラ**警告**に気づきました**しかし、実際のエラーはありませんでした。別の注意点として、このライブラリが私の選択肢でない場合、CでURLを解析するための推奨事項はありますか? – Lamar

+0

@Lamar完全なレシピ ソースコードから実行可能ファイルを構築するためのメイクファイルは、 という形式の関係にあります:*アイテムAが アイテムBに関してアウト日です、C ...それが作られた後、X、Y、Z ... *を行うことでそれを再作成します。 このレシピは基本的に、ソースファイルを オブジェクトファイルにコンパイルしてから*オブジェクトファイルを指定されたライブラリファイル( デフォルトライブラリ)に*リンクして実行可能ファイルにします。リンカーの の役割を理解できない場合は、歩く前に実行しようとしています。 –

+0

@ラマー代替ライブラリについては、私は個人的に1つを推奨することはできませんが、 [This(http://stackoverflow.com/q/2616011/1362568)と[this](http://stackoverflow.com/q/) 726122/1362568) が参考になる場合があります。 –

関連する問題