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

时间:2015-02-27 14:59:54

标签: c++ c makefile

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

skipping incompatible liblinx.a when searching for -llinx 

liblits.so没有错误。如果我删除CFLAGS += "-m32"(我的机器是64位),我收到错误:

skipping incompatible liblits.so when searching for -llits

liblinx.a没有错误。如何同时链接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 

1 个答案:

答案 0 :(得分:3)

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

如何在4GB外部创建一个32位指针的对象可以解决但是64位库中的函数是否可以为32位库中的函数创建?这是不可能的,并且由于这些和许多其他原因,将32位和64位库链接到相同的二进制文件。