【发布时间】:2015-09-01 21:39:00
【问题描述】:
根据this的问题,gcc的-l命令要求你的库被命名为libXXX.a。
有没有办法通过 gcc 使用不同的命令来链接静态库?目标是避免这个 lib- 前缀。
【问题讨论】:
标签: c gcc static-libraries
根据this的问题,gcc的-l命令要求你的库被命名为libXXX.a。
有没有办法通过 gcc 使用不同的命令来链接静态库?目标是避免这个 lib- 前缀。
【问题讨论】:
标签: c gcc static-libraries
只需像这样在输入文件中传递库:
gcc main.c yourlibrary.a -o prog
【讨论】:
-l只需要搜索库路径,自动选择标准命名模式的库。
就像农齐奥说的。只需将其作为输入文件直接传递即可。他打败了我,但无论如何这里有一个完整的例子。
mylib.c:
#include <stdio.h>
void say_hi(void)
{
printf("hi\n");
}
main.c:
extern void say_hi(void);
int main(int argc, char**argv)
{
say_hi();
return 0;
}
生成文件:
main: main.c mylib.a
gcc -o main main.c mylib.a
mylib.a: mylib.o
ar rcs mylib.a mylib.o
mylib.o: mylib.c
gcc -c -o $@ $^
我意识到这需要一些 Make 的背景知识。要在不使用 make 的情况下执行相同的操作,请按顺序运行以下命令:
gcc -c -o mylib.o mylib.c
ar rcs mylib.a mylib.o
gcc -o main main.c mylib.a
【讨论】:
$@ 表示生成目标的名称。 $^ 表示 : 右侧的先决条件(即依赖项)。所以在这种情况下,它是gcc -c -o mylib.o mylib.c 的简写。在这里用处不大。我写这个更多是出于习惯。但它对于通用规则是必要的,并且在其他情况下也很有用。