gcc找不到静态库中的函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gcc找不到静态库中的函数相关的知识,希望对你有一定的参考价值。

您好,在使用GCC编译器时,如果找不到静态库中的函数,可能是由于以下几个原因:

1. 您没有正确指定静态库文件的路径。GCC编译器只能在指定的路径中搜索静态库文件,如果您没有指定正确的路径,就会出现找不到静态库文件的情况。

2. 您没有正确链接静态库文件。在使用GCC编译器时,您需要在编译器中指定要链接的静态库文件,如果您没有正确链接静态库文件,就会出现找不到静态库文件的情况。

3. 您的静态库文件可能已经损坏。如果您的静态库文件已经损坏,那么GCC编译器就无法正确识别静态库文件,从而导致找不到静态库文件的情况。

因此,如果您在使用GCC编译器时遇到找不到静态库文件的情况,您可以检查一下是否有以上几个原因导致的。
参考技术A 有时候你会发现函数所在的静态库,明明在Makefile里指定了,但是还是会报错,提示找不到。
原因就在于静态库之间有依赖关系以及链接顺序问题。书写在右边的库最先被链接。
解决办法:
一般来说有两种办法,一种是仔细分析依赖关系,并按照正确的顺序书写库文件的引用。原则是被依赖的尽量写在右边。但是在有些大型项目中,依赖关系可能并不容易梳理清楚。此时可以在命令行参数中重复对库文件的引用。
参考技术B 如果GCC无法找到静态库中的函数,可能是两方面的原因:一是静态库文件并没有被正确添加到编译过程中;二是静态库文件中并不包含所需函数。

linux自己写的静态库gcc报错

gcc -L. main.c -o app 定义在头文件中的函数main函数调用 为未定义 undefined reference to `add'
-l选项更离谱如下
gcc -l/home/zizz/linuxc/lib static_lib.a main.c -o app
报错:/usr/bin/ld: cannot find -l/ gcc main.c -static ./static_lib.a -o app
只有-static选项能编译通过,为什么呢?
gcc main.c -static ./static_lib.a -o ap p

参考技术A >gcc -L. main.c -o app
>定义在头文件中的函数main函数调用 为未定义
>undefined reference to `add'

改成gcc -L. main.c -lstatic_lib -o app
(同时你的.o文件要命名为libstatic_lib.a, 这是-l选项搜索的文件名模式)
-L 仅仅添加搜索路径, 并不会自动添加链接库

-l选项更离谱如下
gcc -l/home/zizz/linuxc/lib static_lib.a main.c -o app
报错:/usr/bin/ld: cannot find -l/ gcc main.c -static ./static_lib.a -o app
(同上, -l的使用方法不对)

只有-static选项能编译通过,为什么呢?
gcc main.c -static ./static_lib.a -o ap p
(这个好像应该把-static去了也可以吧 -> gcc main.c ./static_lib.a -o app)追问

[root@FIsh lib]# ls
main.c main.cpp~ static_lib.c static_lib.o
main.c~ static_lib.a static_lib.h
[root@FIsh lib]# gcc -L. main.c -lstatic_lib.a -o app
/usr/bin/ld: cannot find -lstatic_lib.a
collect2: ld returned 1 exit status
还是不通过

追答

~~~~~麻烦你原样输入命令好吗!!!!!!!

我说了是把static_lib.a重命名为libstatic_lib.a, 然后-l选项是-lstatic_lib(我没有少打后缀名!!!!!)

(btw, 为啥要用root~~~~~~~~~)

以上是关于gcc找不到静态库中的函数的主要内容,如果未能解决你的问题,请参考以下文章

Restkit 0.20:在自己的静态库中构建存档时找不到

GCC 在 lib 中找不到函数

链接 [重复] 时 gcc 找不到对函数 DoIt() 的引用

GCC (MingW-w64) 找不到基础构造函数 (!?)

gcc 在 lib 中找不到函数

在 GCC 10.3.0 中找不到 _mm256_rem_epu64 内在函数