【问题标题】:Attempting to compile with my own static C library尝试使用我自己的静态 C 库进行编译
【发布时间】:2023-03-05 12:11:01
【问题描述】:

我编译了一个静态库。我有两个文件。

  • mylib_1.c 里面有函数foo1
  • mylib_2.c 包含函数 foo2

#include "mylib.h"

我像这样编译了一个库:

gcc -c mylib_1.c -o mylib_1.o
gcc -c mylib_2.c -o mylib_2.o
ar cr mylib.a mylib_1.o mylib_2.o

然后我尝试用我的库编译mylib_test.c

#include "mylib.h"

int main(void)
{
    foo1("do something cool");
    foo2("do something cool");

    return 0;
}

如果我像gcc mylib_test.c mylib.a 那样编译,GCC 成功并且一切正常。

如果我像 gcc mylib_test.c -Lmylib.a 那样编译,GCC 会失败:

C:\path\to\mylib_test.c:x: undefined reference to foo1
C:\path\to\mylib_test.c:x: undefined reference to foo2

为什么 GCC 会失败?

如果它是一个ḋ̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇̇ifference,我正在运行最新版本的Windows 7.1上的Mingw。

【问题讨论】:

    标签: c gcc static-libraries unix-ar .a


    【解决方案1】:

    您可能需要-l 标志而不是gcc 的-L 标志。 -L 添加库路径,而 -l 链接到库。

    另外,如果你正在为 Linux 制作那个静态库,它的名字应该以lib 开头(但does not have to,感谢@davmac 的提及)。所以你的库文件名应该是libmyLib.a,然后你应该用-lmyLib链接它。 (是的,我也觉得这很尴尬。)。

    我不了解 Windows,但我猜想 Windows 静态库的等价物就是 myLib.lib。如果您正在制作 Windows 库,请先验证此声明。

    查看更多here

    【讨论】:

    • "它的名字必须以 lib 开头" - not necessarily! :)
    • @davmac 太好了!我明天醒来会不那么笨。
    • 谢谢。必须将.a 移动到MinGW\lib,否则,这就是答案。
    • @Lͬͬ̓̈́ͧͣ̽Oͭ̇͂͋̊̆͑ͧ͆͆ͫͬLͣͩ͆͆ͫͬLͣͩ͆͆ͫͬLͣͩ͗̾͐̚ 为避免需要移动存档,您可能需要指定both库路径和要链接的库:-L. -l:mylib.a
    • 很棒的链接,顺便说一句!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2011-07-24
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多