當我嘗試使用庫編譯我的文件(.a)中,我得到「致命錯誤:URLInputStream.h:沒有這樣的文件或目錄 編譯終止。 '。我對C++仍然很陌生,而且這看起來很簡單,但我無法讓它工作。麻煩編譯使用歸檔程序(.a)中
編譯命令我試過:
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
它抱怨什麼文件?順便說一句,編譯'.h'是不尋常的。 – Mat
添加關於編譯'.h'的註釋。你們似乎陷入了這個問題:問題不在於我正在編譯'.h'文件。當我分裂時,結果是一樣的。 –
它說什麼文件無法找到? .a或.h?你提到「-I utils/inc」使它工作的事實會讓我認爲Downloader.h引用了這個頭文件中的東西。即使在鏈接步驟中包含靜態庫時,仍然需要編譯頭。 – Joe