是什么导致了错误:C 库中的“未定义引用(函数)”?[复制]

What causes the error: "undefined reference to (function)" in a C library? [duplicate]

提问人:Bogdan Doicin 提问时间:10/18/2023 更新时间:10/18/2023 访问量:58

问:

我正在使用 Code::Blocks 构建一个库,我正在测试是否可以从我的 C 程序中调用它。但是,当我编译 C 程序时,我收到以下错误消息:

 AIA\Surse\tregpol.c|224|undefined reference to `test'|
||error: ld returned 1 exit status|

以下是文件的内容:

主要的 C 程序 tregpol.c

#include "optim.h"
int main() {
    test();
    return 0;
}

头文件 optim.h

#ifndef OPTIM_H_INCLUDED
#define OPTIM_H_INCLUDED

void test();

#endif // OPTIM_H_INCLUDED

函数源 optim.c

#include "optim.h"

void test()
{
    printf("It works!");
}

我做错了什么?和 文件与上述文件位于同一文件夹中。.dll.a.def

C 代码块

评论

1赞 Ole Morud 10/18/2023
您可能在编译 tregpol.c 时没有添加 optim.c。如果你使用的是 gcc,它会是这样的gcc optim.c tregpol.c
3赞 HolyBlackCat 10/18/2023
你链接了你的图书馆吗?
1赞 the busybee 10/18/2023
请使用所有命令行提供一个最小的可重现示例,以构建库和构建应用程序。光有来源是不够的。

答:

0赞 Mattia Piras 10/18/2023 #1

您可能想尝试像这样分别编译“optim.c”和“main.c”文件:

gcc -c optim.c && gcc -c main.c

这将产生 2 个对象文件

然后将它们链接在一起:

gcc -Wall -O optim.o main.o -o main

评论

0赞 the busybee 10/18/2023
OP 想要构建一个库并将其链接起来。您的提案仅链接两个对象文件。