Проблемы с компиляцией программы с использованием архива (.a) - PullRequest
0 голосов
/ 29 октября 2011

Когда я пытаюсь скомпилировать мой файл, используя библиотеку (. 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 Ответ

2 голосов
/ 29 октября 2011

Если Downloader.h по-прежнему, вероятно, нужны заголовочные файлы для общения с типами / классами / и т. Д.в вашей статической библиотеке.

Тот факт, что вы упоминаете, что "-I utils / inc" заставляет его работать, заставляет меня думать, что Downloader.h ссылается на материал в этом заголовке.Вам все еще нужен заголовок для компиляции, даже если у вас есть статическая библиотека как часть шага ссылки.

...