Вызов метода в статической библиотеке

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
    Какую именно ошибку вы получаете?
  • 0
    @nneonneo Я добавил это к вопросу.
Показать ещё 3 комментария
Теги:
static-libraries
standard-library

5 ответов

3
Лучший ответ

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

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

  • 0
    Да, я забыл это сделать! Спасибо!
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

Включить библиотеку

#include <stdbool.h>
  • 0
    Я не думаю, что это так, так как OP упомянул [...] math.h,bool.h,ctype.h,string.h, and io.h are defined in my library. What am I doing incorrectly? [...]
0

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

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

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

0

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

#include "bool.h"

Проверьте это: Включите синтаксис

  • 0
    Я просто получаю ту же ошибку helloTest.c:10:10: fatal error: 'bool.h' file not found
  • 0
    Тогда может быть вероятность, что вы поместили этот заголовочный файл в другое место или неправильно написали заголовок.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню