【发布时间】:2021-06-12 21:03:09
【问题描述】:
我正在尝试将我创建的库链接到主要源代码,但它会引发此错误。我一直在寻找过去两个小时如何解决此问题,但对我没有任何帮助。
编译:
cd "c:\Users\miros\OneDrive\Documents\C codes\labovi"
gcc 01main.c -o 01main
.\01main
d:/programs/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\ miros\AppData\Local\Temp\ccGHtHKg.o:01main.c:(.text+0x46):未定义对“faktorijel”的引用 d:/programs/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\miros\AppData \Local\Temp\ccGHtHKg.o:01main.c:(.text+0x72): undefined reference to 'suma' collect2.exe:错误:ld 返回 1 个退出状态
01ucitavanje.h
#ifndef UCITAVANJE_H
#define UCITAVANJE_H
#include <stdio.h>
#include <stdlib.h>
long long *niz;
int n;
void ucitavanje();
#endif
01ucitavanje.c
#include "01ucitavanje.h"
void ucitavanje(){
scanf("%d", &n);
niz = malloc(sizeof(long long) * n);
for (int i = 0; i < n; i++)
scanf("%d", niz + i);
}
01izracunavanje.h
#ifndef IZRACUNAVANJE_H
#define IZRACUNAVANJE_H
#include <stdio.h>
long long faktorijel(int n);
long long suma(long long *niz, int n);
#endif
01izracunavanje.c
#include "01izracunavanje.h"
long long faktorijel(int n){
long long f;
for (int i = 2; i <= n; i++)
f *= i;
return f;
}
long long suma (long long *niz, int n){
long long s = niz[0];
for (int i = 1; i < n; i++)
s += niz[i];
return s;
}
main.c
#include "01izracunavanje.h"
#include "01ucitavanje.h"
int main(){
ucitavanje();
for (int i = 0; i < n; i++)
niz[i] = faktorijel((int)niz[i]);
printf("%d", suma(niz, n));
free(niz);
return 0;
}
【问题讨论】:
-
你是如何构建/链接的?
-
我运行它的方式与运行一个 .c 文件的方式相同,这意味着我正在尝试启动 main.c。
-
您通常需要告诉链接器如何找到您的库。通常,这需要将
-l标志传递给工具链。
标签: c libraries modularization