【问题标题】:Using a static library in c (.a file)在 c (.a 文件) 中使用静态库
【发布时间】:2021-04-27 12:46:45
【问题描述】:

我正在尝试使用 shell 脚本创建一个静态库。

为了创建库,我使用了以下脚本:

gcc -c -Wall -Wextra -Werror *.c
ar -cr libft.a *.o

5 个 .c 文件中有 5 个不同的功能。

现在我想测试这个库并创建了一个包含以下内容的 main.c 文件:

#include "libft.a"

int     main(void)
{
    ft_putstr("hello");
}

编译 main.c(使用 gcc main.c)返回 419 警告和至少 20 个错误,如下所示:

./libft.a:4:492: warning: null character ignored [-Wnull-character]
  ...<U+0000>UH<89><E5>H<83><EC><U+0010>@<88>}<FF><BF><U+0001><U+0000><U+0000><U+0000>H<8D>u...

在此之前,我使用的 .h 文件运行良好,但这次我不应该创建 .h 文件,所以我不知道该怎么做。

【问题讨论】:

  • 仅包含.h 文件。始终为要从其他 .c 文件调用的函数编写头文件。 .a 将提供给链接器。

标签: c shell gcc


【解决方案1】:

#include "file_name" 的意思是“请把file_name 文件的内容复制粘贴到这里”,所以不能和.a 文件一起使用。

你可以编写函数的声明直接使用,而不是使用.h文件。

/* guessed from usage, please use correct argument and return type */
void ft_putstr(const char*);

int     main(void)
{
    ft_putstr("hello");
}

然后通过链接库编译源代码:

gcc main.c -lft

【讨论】:

  • 那不是我的问题。我现在想知道如何测试我的 libft.a 文件。这是我需要完成的任务,这就是为什么我不应该使用不同的方式。
  • @jsiller 更新了我的答案。
  • 请注意,您可能需要gcc main.c -lft -L.
  • -lft 是什么意思?我使用 gcc main.c libft.a。现在它可以工作了。
  • 有没有办法使用 libft.a 而不使用 gcc 的额外标志?
【解决方案2】:

当你编译你的 main.c 时,像这样添加库名称:

gcc main.c libft.a

【讨论】:

    猜你喜欢
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 2017-07-05
    • 1970-01-01
    相关资源
    最近更新 更多