【发布时间】: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