linux - linux下gcc使用静态库的方法

标签 linux gcc static-libraries static-linking

我正在尝试使用通过“ar”创建的静态库“mylib.a”。我看到的示例使用 -L 和 -l 来命名库。我尝试使用这些失败了。但是,如果我只是将库文件名放在链接器命令上,它就可以工作。 (我忽略了一些明显的东西?)使用 gcc 4.8.4 Ubuntu 14.04(请参阅代码中的注释。)f?.c 和 mymain.c 非常简单。谢谢!

#!/bin/bash

# cc -v    shows...
#  gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.1) 

cc -c -Wall -Wstrict-prototypes -o fa.o fa.c
cc -c -Wall -Wstrict-prototypes -o fb.o fb.c
cc -c -Wall -Wstrict-prototypes -o fc.o fc.c
cc -c -Wall -Wstrict-prototypes -o mymain.o mymain.c

ar -rcs mylib.a  fa.o fb.o fc.o

# THIS WORKS
#cc -o mypgm mymain.o mylib.a

# THESE FAIL WITH ERROR '/usr/bin/ld: cannot find -lmylib'
cc -o mypgm mymain.o -L. -lmylib
# OR 
cc -o mypgm mymain.o -static -L. -lmylib

###

最佳答案

comment 中所述……

当您使用 -lname 时,链接器会在它拥有的目录之一中查找 libname.alibname.so (已经)被告知要搜索图书馆。

您可以将您的库重命名为 libmine.a 然后是 -L。 -lmine 将起作用,或将其重命名为 libmylib.a 然后 -lmylib 将起作用(但重复的 lib 看起来有点笨拙,或者新手)。

关于linux - linux下gcc使用静态库的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35927453/

相关文章:

gcc - x86 fbstp指令的C内联汇编

java - 命名空间 "classloader-namespace"无法访问库

qt - 如何使用静态构建的 Qt 解决此 'no service found for - “org.qt-project.qt.mediaplayer” ' 错误?

在 C 中转换转义序列

linux 内置读取命令标志

linux - apt-get 安装失败且无法正常工作

c - 为什么用 1 和 0 初始化数组会使可执行文件如此之大?

linux - Alpine Linux 镜像上的 maven 和 jdk8

linux - 循环 0xb7 汇编但不会链接

linker - 连接 glfw 和 D