Я делаю тестовую настройку статической библиотеки и программы C. Код библиотеки, расположенный в подкаталоге 'Foo' моего проекта, содержит следующие файлы:Включая файл заголовка из статической библиотеки
Foo/Foo.c:
#include <stdio.h>
void foo(void) {
printf("something");
}
Foo/foo.h:
#ifndef foo_h__
#define foo_h__
extern void foo(void);
#endif
Мой Progam код выглядит следующим образом:
test.c:
#include "foo.h"
int main() {
foo();
return 0;
}
У меня есть сценарий сборки, под названием 'сборки', который содержит следующее:
сборки:
#!/bin/bash
gcc -c -Wall -Werror foo/foo.c
ar rcs libfoo.a foo.o
gcc -static -o test test.c libfoo.a # I have also tried -L. -lfoo
Но когда я бегу строить, это дает мне следующую ошибку:
test.c:1:17: fatal error: foo.h: No such file or directory
#include "foo.h"
^
Compilation terminated
Это делает, ho wever, работайте, когда я опускаю строку #include, но я бы предпочел, чтобы использовать заголовочные файлы в своих статических библиотеках. Что я делаю неправильно, и как я могу это исправить?
Но заголовок foo.h является частью библиотеки libfoo.a, не так ли? Кроме того, проблема защиты заголовка была опечаткой, когда я перепечатал ее в stackoverflow, что я сделал, потому что я нахожусь в Windows SSHing в системе ubuntu. –
№. Библиотека содержит только и только объектные файлы. Заголовочные файлы _not_ object. Заголовки не содержатся в библиотеках. (ОК: чтобы быть полностью педантично точным, вы могли бы добавить файл заголовка в библиотеку, но компилятор никогда не будет выглядеть в библиотеке - только компоновщик ('ld', обычно) выглядит в библиотеках и ищет только объектные файлы , а не заголовки). –
О, ладно. Благодарю вас за разъяснение. Но почему, например, я могу включить, например, «ncurses.h» из библиотеки ncurses? –