0

ライブラリ(.a)を使用してファイルをコンパイルしようとすると、 「致命的なエラー: URLInputStream.h: そのようなファイルまたはディレクトリのコンパイルは終了しませんでした。' . 私はまだC++にかなり慣れていないので、これはとても簡単に思えますが、うまく動作しません。

私が試したコンパイルコマンド:

g++ inc/Downloader.h lib/libcs240utils.a
g++ inc/Downloader.h -L lib -l cs240utils
g++ inc/Downloader.h -Llib -lcs240utils
g++ src/Downloader.cpp -I inc -L lib -l cs240utils 
g++ -c src/Downloader.cpp -I inc -L lib -l cs240utils 

アーカイブのコンパイル方法:

make lib
g++ -c -o utils/obj/CommandRunner.o utils/src/CommandRunner.cpp -I utils/inc
g++ -c -o utils/obj/FileInputStream.o utils/src/FileInputStream.cpp -I utils/inc
g++ -c -o utils/obj/FileSystem.o utils/src/FileSystem.cpp -I utils/inc
g++ -c -o utils/obj/HTMLToken.o utils/src/HTMLToken.cpp -I utils/inc
g++ -c -o utils/obj/HTMLTokenizer.o utils/src/HTMLTokenizer.cpp -I utils/inc
g++ -c -o utils/obj/HTTPInputStream.o utils/src/HTTPInputStream.cpp -I utils/inc
g++ -c -o utils/obj/StringUtil.o utils/src/StringUtil.cpp -I utils/inc
g++ -c -o utils/obj/URLInputStream.o utils/src/URLInputStream.cpp -I utils/inc
ar cr lib/libcs240utils.a utils/obj/*.o

アーカイブは正しく構築されているようです:

ar t lib/libcs240utils.a 

CommandRunner.o
FileInputStream.o
FileSystem.o
HTMLToken.o
HTMLTokenizer.o
HTTPInputStream.o
StringUtil.o
URLInputStream.o

でさまざまなオプションも試しましたar。インクルード パスを指定する-I utils/incと、コンパイルして正常に動作するため、目的のファイルは正常に動作します。ここ StackOverflow に関する多数の記事や質問を読みましたが、自分が何を間違っているのかわかりません。 アイデアや提案はありますか?

注: 奇妙に思われるヘッダーをコンパイルしています。.cpp元々はとに分割されて.hいましたが、問題解決を簡単にするためにそれらをマージしました。それらが分割されたときにも、この同じエラーが発生しました。g++ src/Downloader.cpp -I inc -L lib -l cs240utils

4

1 に答える 1

2

Downloader.h が、types/classs/etc と対話するためにヘッダー ファイルを必要とする可能性がある場合。あなたの静的ライブラリで。

「-I utils/inc」が機能するとあなたが言及したという事実は、Downloader.hがそのヘッダー内のものを参照していると私に思わせるでしょう。リンクステップの一部として静的ライブラリがある場合でも、コンパイルにはヘッダーが必要です。

于 2011-10-29T17:39:19.893 に答える