【问题标题】:Create a static libary and link against it创建一个静态库并链接它
【发布时间】:2019-02-15 14:16:36
【问题描述】:

你好美丽的人们,

我正在尝试创建一个静态库并针对它进行编译。 我已经为它创建了一个小的静态库和一个头文件。

标题(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

失败,即使我将标头 mymath.h 包含到 gcc 你能帮帮我吗?

【问题讨论】:

  • 参数的顺序很重要。将库搜索路径参数 -L. 放在链接器库选项 -lmymath 之前。

标签: c gcc static


【解决方案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 

它应该可以工作。

【讨论】:

    猜你喜欢
    • 2013-07-07
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    相关资源
    最近更新 更多