gpt4 book ai didi

mingw - MinGW 中的静态链接库

转载 作者:行者123 更新时间:2023-12-02 07:37:35 26 4
gpt4 key购买 nike

假设我有三个 C 源文件。前两个是 LIB(lib*.a?),第三个是使用它们的应用程序。

第一个是(re.c):

int re(int i) {
return i;
}

第二个是(test.c):

int re(int); // Depends on re.c

int test(int i) {
return re(i);
}

第三个是(main.c):

#include<stdio.h>

int test(int); // Uses test.c

int main(void) {

printf("%d\n",test(0));
return 0;
}

现在如何创建前两个 LIB,以便稍后将它们与主应用程序静态链接?

我知道如何创建 DLL 并在我的应用程序中动态链接它们,例如:

cc -o re.dll re.c -shared -Wl,--out-implib=libre.a (for re.c)

cc -o test.dll test.c -L. -lre -shared -Wl,--out-implib=libtest.a (for test.c)

cc -o main.exe main.c -L. -lre -ltest

<小时/>

那么如何创建等效的 LIB 以在 MinGW 中的可执行二进制文件中静态链接,以及如何链接它们?

显然,在 Windows 下:)

最佳答案

我在这里找到了解决方案:http://www.codeproject.com/Articles/84461/MinGW-Static-and-Dynamic-Libraries

这个想法是编译所有库(源文件)而不链接。然后使用 ar rcs -o lib*.a *.o 转换输出对象,其中 * 是创建的对象的名称(将它们一一转换)。之后,我们只需使用 -L. 编译应用程序来指定目录,并使用 -l* 来指定不带 GNU 命名修饰的库名称。

对于那些依赖于其他库的库,应该先指定它们,然后再指定引用的库,否则当我执行-lre -ltest时会出现诸如undefined reference to re之类的错误,其中 -ltest -lre 是正确的,因为测试库引用了 re 库。

这是我编译它的方法:

cc -c -o test.o test.c

cc -c -o re.o re.c

ar rcs -o libtest.a test.o

ar rcs -o libre.a re.o

cc -o main.exe main.c -L. -ltest -lre

它也适用于 Tiny C 编译器。

关于mingw - MinGW 中的静态链接库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10774937/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com