Я пытаюсь написать стандартную библиотеку C с нуля на OSX с gcc. Когда я пытаюсь включить заголовочный файл из моей библиотеки в свою тестовую программу, я получаю ошибку, которая не определена. Я пытаюсь использовать флаг -nostdlib, но я все еще не могу включить свой файл.
Моя тестовая программа:
#include <math.h>
#include <bool.h>
#include <ctype.h>
#include <string.h>
#include <io.h>
int main(){
int x = sin(0.5);
int y = pow(2,3);
int z = abs(12);
myiofunction(7);
exit(0);
}
math.h, bool.h, ctype.h, string.h и io.h определены в моей библиотеке. Что я делаю неправильно?
EDIT: сообщение об ошибке, которое я получаю:
helloTest.c:10:10: fatal error: 'bool.h' file not found
Файлы заголовков не компилируются в статическую библиотеку. Они должны быть доступны как библиотеке, так и программе.
Поэтому при компиляции вашей программы обязательно укажите опции -I
, чтобы компилятор мог найти файлы заголовков библиотеки.
Для того, чтобы он также использовал вашу собственную стандартную библиотеку, вы должны использовать параметр -I
для включения вашей библиотеки:
gcc -nostdlib -I/path/to/my/headers/ ...
Поэтому, если заголовки для этих файлов были расположены в ./include
, вы должны скомпилировать с помощью:
gcc -nostdlib -I./include/ ....
Конечно, в какой-то момент вам необходимо предоставить объектный код для этих функций. Затем вы можете связать их все вместе, используя ld
с -lgcc
чтобы разрешить любые внутренние подпрограммы GCC.
Параметры связи GCC: https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html
Включить библиотеку
#include <stdbool.h>
math.h,bool.h,ctype.h,string.h, and io.h are defined in my library. What am I doing incorrectly?
[...]
Если вы его используете, это не сработает. Вы должны ввести "bool.h"
и другое - опция -l. Проверьте это: https://gcc.gnu.org/onlinedocs/cpp/Search-Path.html
Если указано местоположение по умолчанию: -R [PATH]
helloTest.c:10:10: fatal error: 'bool.h' file not found