Makefile,如何同时链接32位库和64位库

Makefile, how to link 32bits library and 64bits library at the same time

本文关键字:64位库 32位 链接 何同时 Makefile      更新时间:2023-10-16

我有两个库,一个称为liblits.so,它是32位,另一个名为liblinx.a,它是64位。我需要将它们两者链接起来,在我的Makefile中,添加CFLAGS += "-m32"后,我得到了错误:

skipping incompatible liblinx.a when searching for -llinx 

但CCD_ 4没有出现错误。如果我删除CFLAGS += "-m32"(我的机器是64位),我会得到错误:

skipping incompatible liblits.so when searching for -llits

但CCD_ 6无异常。如何同时链接32位库和64位库?或者我必须有两个一致的库?

我的Makefile:

CFLAGS = -I.
CFLAGS += "-m32" 
LDFLAGS = -Llinx -llinx -Llib -llits -lrt -lpthread -Wl,-R,'lib' 
server:server.c
    gcc -o server $(CFLAGS) $(LDFLAGS) server.c 

您需要一致的库。32位和64位库中的机器代码是不兼容的——例如,指针大小不同,导致对虚拟地址空间大小的期望不同,并出现类似的问题。

如何使4GB之外的对象成为32位指针可以寻址的对象,但64位库中的函数可以创建32位库中函数已知的对象?这是不可能的,由于这些和许多其他原因,将32位和64位库链接到同一个二进制文件也是不可能的。