调用静态库中的方法

Calling a method in a static library

本文关键字:方法 静态 调用      更新时间:2023-10-16

我正试图用gcc在OSX上从头开始编写一个C标准库。当我试图在测试程序中包含库中的头文件时,我会得到一个未定义的错误。我尝试使用-nostlib标志,但仍然无法包含我的文件。

我的测试程序:

#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

头文件不会编译到静态库中。它们必须对库和程序都可用。

因此,在编译程序时,请确保指定-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 "bool.h"

看看:包括语法

如果使用它,无论如何都不会起作用。你必须键入"bool.h"

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

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

要包含的库是

#include <stdbool.h>