我有两个库,一个名为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
答案 0 :(得分:3)
您需要一致的库。 32位和64位库中的机器代码是不兼容的 - 例如,您有不同的指针大小,导致对虚拟地址空间大小和类似问题的不同期望。
如何在4GB外部创建一个32位指针的对象可以解决但是64位库中的函数是否可以为32位库中的函数创建?这是不可能的,并且由于这些和许多其他原因,将32位和64位库链接到相同的二进制文件。