2014-09-13 3 views
0

Я пытаюсь написать стандартную библиотеку 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 
+1

Какова точная ошибка, которую вы получаете? – nneonneo

+0

@nneonneo Я добавил его к вопросу. – user3689979

+0

... Вы использовали '-I' для указания правильных включенных путей? – nneonneo

ответ

3

Файлы заголовка не скомпилированы в статическую библиотеку. Они должны быть доступны как библиотеке, так и программе.

Поэтому при компиляции вашей программы обязательно укажите параметры -I, чтобы компилятор мог найти файлы заголовков вашей библиотеки.

+0

Да, я забыл это сделать! Благодаря! – user3689979

0

Вам нужно написать:

#include "bool.h"

проверить это: Include Syntax

+0

Я просто получаю ту же ошибку 'helloTest.c: 10: 10: фатальная ошибка: файл« bool.h »не найден» – user3689979

+0

Тогда может быть возможно, что вы разместили этот файл заголовка где-то еще или пропустили заголовок. – Avinash

3

Для того, чтобы он также использует вашу собственную стандартную библиотеку, вы должны использовать -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

0

Если вы его используете, это не сработает. Вы должны набрать «bool.h»

, а другая вещь -l вариант. Проверьте это: https://gcc.gnu.org/onlinedocs/cpp/Search-Path.html

Если вы specifiy местоположение по умолчанию: -R [PATH]

0

библиотеку, чтобы включить это

#include <stdbool.h> 
+0

Я не думаю, что это так, поскольку OP упоминается [...] 'math.h, bool.h, ctype.h, string.h и io.h определены в моей библиотеке. Что я делаю неправильно? [...] – user1810087

Смежные вопросы