C++ 使用存档(.a)编译程序时出现问题

C++ 使用存档(.a)编译程序时出现问题,c++,compilation,g++,unix-ar,C++,Compilation,G++,Unix Ar,当我尝试使用库(.a)编译我的文件时,我得到“致命错误:URLInputStream.h:没有这样的文件或目录。” 编译终止。 '/Stult>我对C++仍然很新,这看起来很简单,但我不能让它工作。< /P> 我尝试过的编译命令: g++ inc/Downloader.h lib/libcs240utils.a g++ inc/Downloader.h -L lib -l cs240utils g++ inc/Downloader.h -Llib -lcs240utils g++ src/Dow

当我尝试使用库(.a)编译我的文件时,我得到“致命错误:URLInputStream.h:没有这样的文件或目录。” 编译终止。 '/Stult>我对C++仍然很新,这看起来很简单,但我不能让它工作。< /P> 我尝试过的编译命令:

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
中的各种选项。如果我指定一个include路径
-I utils/inc
,那么它将编译并正常工作,因此我想要的文件可以正常工作。我在这里读了很多关于StackOverflow的文章和问题,我似乎看不出我做得不对有什么想法或建议吗?


注意:我正在编译一个看起来很奇怪的标题。它最初分为
.cpp
.h
,但为了简化问题解决,我将它们合并了。拆分它们时也会发生同样的错误:
g++src/Downloader.cpp-I inc-L lib-L cs240utils

如果Downloader.h可能仍然需要头文件与静态库中的类型/类等进行对话


您提到“-I utils/inc”使其工作的事实会让我认为Downloader.h引用了该标题中的内容。即使在链接步骤中有一个静态库,您仍然需要编译头

它在抱怨什么文件?顺便说一句,编译
.h
是不寻常的。添加了有关编译
.h
的注释。你们似乎被这个问题缠住了:问题不在于我正在编译一个
.h
文件。这和我拆分它时的结果是一样的。它说什么文件找不到?a还是h?您提到“-I utils/inc”使其工作的事实会让我认为Downloader.h引用了该标题中的内容。即使在链接步骤中有一个静态库,您仍然需要编译头。这里的存档是一个麻烦。为什么要将头传递给
g++
?这似乎不是我读过的内容。然而,有大量关于ar和g++的文章,所以很难对它们进行搜索。我相信你的话。你误读了。文件是.o文件的美化集合。与处理任何其他库或对象文件一样,您仍然需要这些头文件。这就是为什么世界上的每个库和SDK都会附带目标代码(对于静态/共享变体,通常是.a和/或.so)和使用它们的头文件。