链接gcc中的静态库,而不必指定'lib'前缀

Gre*_*age 6 c gcc static-libraries

根据这个问题,gcc的-l命令要求你的库名为libXXX.a.

有没有办法使用不同的命令与gcc链接静态库?目标是避免使用此lib-前缀.

小智 6

像输入文件一样传递库,如下所示:

gcc main.c yourlibrary.a -o prog
Run Code Online (Sandbox Code Playgroud)


Bri*_*and 5

像nunzio说的那样.只需将其作为输入文件直接传递即可.他打败了我,但无论如何,这是一个完整的例子.

mylib.c:

#include <stdio.h>
void say_hi(void) 
{ 
  printf("hi\n"); 
}
Run Code Online (Sandbox Code Playgroud)

main.c中:

extern void say_hi(void);
int main(int argc, char**argv)
{
  say_hi();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Makefile文件:

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 $@ $^
Run Code Online (Sandbox Code Playgroud)

我意识到这假设了Make的一些背景知识.要做同样的事情,请按顺序运行这些命令:

gcc -c -o mylib.o mylib.c
ar rcs mylib.a mylib.o
gcc -o main main.c mylib.a
Run Code Online (Sandbox Code Playgroud)

  • 当然.这是一个makefile的东西,而不是gcc的东西.这些被称为自动变量.`$ @`表示make目标的名称.`$ ^`表示`:`右侧的先决条件(即依赖项).所以在这种情况下,它是`gcc -c -o mylib.o mylib.c`的简写.这里使用起来并不多.我写的更多是出于习惯而不是任何事情.但这对于通用规则是必要的,否则可能是有用的. (2认同)