使用存档编译程序时遇到问题(.a)

时间:2011-10-29 17:30:17

标签: c++ compilation g++ ar

当我尝试使用库(.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

1 个答案:

答案 0 :(得分:2)

如果Downloader.h仍然可能需要头文件与类型/类/等进行通信。在静态库中。

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