【问题标题】:Undefined function from static library静态库中的未定义函数
【发布时间】:2017-06-21 02:03:45
【问题描述】:

我正在尝试使用 MinGW 构建一个静态库。

一切都很顺利,直到我尝试使用该库并收到一条错误消息说 add_numbers 是一个未定义的函数。

许多其他人都遇到过这个问题,并通过在包含源文件后移动他们的库以进行链接来解决这个问题,但无论如何我都是这样编写批处理文件的,所以这并没有太大帮助。

这是我的来源。

mylib.h

#ifndef MYLIB_H
#define MYLIB_H
int add_numbers(int a, int b, int c);
#endif

mylib.c #include “mylib.h” int add_numbers(int a,int b,int c) { 返回 a+b+c; }

我正在使用以下命令构建我的 .a 文件

gcc --std=c89 -c mylib.c -o mylib.o

ar rcs libmylib.a mylib.o

我也尝试过不指定标准。 运行此命令时没有错误或警告。

接下来,我的测试程序是这样的。

#include <stdio.h>
#include "mylib.h"
int main()
{
printf("The sum of 1, 2, and 3 is %d", add_numbers(1, 2, 3));
getchar();
return 0;
}

最后,我们使用这个命令构建测试。 gcc mylibtest.c -L -lmylib -o test.exe

我尝试将这些命令移动到许多不同的序列中,但总是收到以下错误:

C:\Users\Aaron\AppData\Local\Temp\cc0ERpBi.o:mylibtest.c:(.text+0x26): 未定义 参考“add_numbers” collect2.exe:错误:ld 返回 1 个退出状态

E:\my_first_static_library>

任何帮助都将不胜感激,我已经阅读了我能找到的所有关于编写静态库的艺术的教程,以及十个很好的 stackoverflow 问题。

【问题讨论】:

  • yugr 有你的答案。你有-L而不是-L.,所以链接器发现-L的参数是-lmylib,即-lmylib是你希望链接器搜索库的目录的名称,因此没有发现您实际上正在链接任何库。因此未定义对您的库函数的引用。

标签: gcc


【解决方案1】:

-L 后面少了一个点:

gcc mylibtest.c -L . -lmylib -o test.exe

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多