你好漂亮的人,
我正在尝试创建静态库并对其进行编译。 我已经准备好了一个小的静态库和它的头文件。
标题(math.h):
int add (int a, int b);
int sub (int a, int b);
add.c:
int add (int a, int b) { return a + b; }
sub.c:
int sub (int a, int b) { return a - b; }
我已经使用以下命令创建了静态库:
gcc -c add.c
gcc -c sub.c
ar rcs libmymath.a add.o sub.o
现在是我的main.c
#include <stdio.h>
#include "math.h"
int main( int argc, char **argv ) {
printf("Result : %d\n", add(5,7) );
return 0;
}
我可以使用以下命令对其进行编译:
gcc main.c libmymath.a -o main
但是,如果我按照以下方式进行编译,它将失败。
gcc main.c -lmymath -L. -o main
它失败并出现以下错误:
/usr/bin/ld: cannot find -lmymath collect2:
error: ld returned 1 exit status
甚至更改为
gcc main.c -llibmymath -L. -o main
失败,即使我在gcc中包含标头mymath.h 你能帮我吗?
答案 0 :(得分:1)
gcc已经通过libmath.so或libmath.a理解了-lmymath。因此,当您在-llibmymath中添加lib单词时。在这种情况下,gcc知道您的库名称为liblibmymath.a。因此,请替换此命令
gcc main.c -llibmymath -L. -o main
通过
gcc main.c -o main -L. -lmymath
应该可以。