在静态库中调用方法

时间:2014-09-13 21:32:28

标签: c++ c static-libraries standard-library

我正在尝试使用gcc在OSX上从头开始编写C标准库。当我尝试在我的测试程序中包含我的库中的头文件时,我得到的错误是它没有定义。我尝试使用-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。我做错了什么?

编辑: 我得到的错误信息是:

helloTest.c:10:10: fatal error: 'bool.h' file not found

5 个答案:

答案 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

答案 1 :(得分:3)

头文件未编译到静态库中。它们必须可供图书馆和计划使用。

因此,在编译程序时,请确保指定-I选项以让编译器找到库的头文件。

答案 2 :(得分:0)

你需要写:

#include "bool.h"

检查出来: Include Syntax

答案 3 :(得分:0)

如果你使用它,无论如何都不会工作。你必须输入&#34; bool.h&#34;

另一个是-l选项。 看看:https://gcc.gnu.org/onlinedocs/cpp/Search-Path.html

如果指定默认位置:-R [PATH]

答案 4 :(得分:0)

要包含的库是

#include <stdbool.h>