将主要错误链接到库

卡利诺

最近,我尝试创建一个库,并为此创建了两个文件:file-parser.c以及array.c相应的.h文件。因此,在文件解析器中,我正在使用数组中的一个函数,该函数调用长度,并且在我编译(不链接它)时parser-file.c,命令

gcc -c -o file-parser.o file-parser.c
gcc -c -o array.o array.c
ar r libutils.a array.o file-parser.o 

不要告诉我一个错误。

问题是当我编译main.c文件时

gcc -o prova main.c -L. -lutils

gcc返回:

array/libutils.a(file-parser.o): in function "AnalizeRow":
file-parser.c:(.text+0x109): undefined reference to "length"
array/libutils.a(file-parser.o): in the function "GetWord":
file-parser.c:(.text+0x16a): undefined reference to "length"
collect2: error: ld returned 1 exit status

我不是英语,所以我认为ld收到了错误消息谁能解释我的错误在哪里?谢谢。

帕迪姆科

在开发过程中的任何地方都可能发生类似的错误!!!

您的问题并未全面介绍当前的开发过程。

看到您的问题后,我看到您有两个带有源代码的文件-array.cfile-parser.c此外,您还提到了静态库libutils.a,但没有指出-您如何创建它以及现在包含什么。


我尝试重新创建您的当前位置:

文件file-parser.c

#include <stdlib.h>

int
AnalizeRow(char row[])
{
    size_t len = length(row);
    return 0;
}


char *
GetWord(char row[])
{
    size_t len = length(row);
    return NULL;
}

文件file-parser.h

int AnalizeRow(char row[]);
char* GetWord(char row[]);

文件array.c

#include <string.h>

size_t
length(char row[])
{
    return strlen(row);
}

文件array.h

size_t length(char row[]);

创建空的静态库libutils.a

$ ar cr libutils.a
$ ar t libutils.a (it empty)

您的验证码

$ gcc -c -o file-parser.o file-parser.c
$ gcc -c -o array.o array.c
$ ar r libutils.a array.o file-parser.o

内容libutils.a

$ ar t libutils.a
array.o
file-parser.o

构建并运行

$ gcc -o prova main.c -L. -lutils && ./prova

我一点都没有错误。


初步结论:

  1. 我的开发过程有误
  2. 您的静态库libutils.a是导致此问题的原因
  3. 您的源代码在文件中是导致问题的原因

测试环境

$ gcc --version
gcc (Debian 4.9.2-10) 4.9.2
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 8.7 (jessie)
Release:    8.7
Codename:   jessie
$ uname -a
$ apt-cache policy binutils
binutils:
  Installed: 2.25-5+deb8u1
  Candidate: 2.25-5+deb8u1
  Version table:
 *** 2.25-5+deb8u1 0
        500 http://ftp.ru.debian.org/debian/ jessie-proposed-updates/main amd64 Packages
        100 /var/lib/dpkg/status
     2.25-5 0
        500 http://ftp.ru.debian.org/debian/ jessie/main amd64 Packages
        500 http://httpredir.debian.org/debian/ jessie/main amd64 Packages

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将静态库链接到共享库

来自分类Dev

在将共享库层次结构链接到可执行文件时,cmake链接错误

来自分类Dev

无法将库链接到目标?

来自分类Dev

将Boost库链接到Xcode项目

来自分类Dev

将fortran代码链接到库

来自分类Dev

将D库链接到Ruby

来自分类Dev

将tesseract库链接到QtCreator

来自分类Dev

将静态库链接到dll

来自分类Dev

将SFML静态库链接到项目

来自分类Dev

将原生库链接到 Android 项目

来自分类Dev

可能的GCC错误:将库链接到项目时,缩短了长参数。C \ C ++

来自分类Dev

将共享库彼此链接到共享库C ++

来自分类Dev

Android将许多静态库链接到共享库

来自分类Dev

将静态库链接到共享库并隐藏导出的符号

来自分类Dev

使用automake将共享库链接到静态libtool库

来自分类Dev

将共享库彼此链接到共享库C ++

来自分类Dev

将程序链接到静态库,将自身链接到另一个库

来自分类Dev

QtCreator-无法链接到静态库(ld错误)

来自分类Dev

SQL链接到Access数据库错误

来自分类Dev

VS2008链接到错误的Boost库

来自分类Dev

VS2008链接到错误的Boost库

来自分类Dev

链接到Boost库

来自分类Dev

将C编译的静态库链接到C ++程序

来自分类Dev

musl无法将libc.a链接到共享库

来自分类Dev

将C程序链接到C ++共享库

来自分类Dev

将依赖关系链接到静态库?

来自分类Dev

如何将外部共享库链接到本机扩展?

来自分类Dev

CMake:将openscenegraph链接到我的共享库

来自分类Dev

将测试套件链接到库时出错