sách gpt4 ai đã đi

mingw - MinGW 中的静态链接库

In lại 作者:行者123 更新时间:2023-12-02 07:37:35 27 4
mua khóa gpt4 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 

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

int main(void) {

printf("%d\n",test(0));
trả về 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 下:)

1 Câu trả lời

我在这里找到了解决方案: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之类的错误,TRONG -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/

27 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com