Makefile,如何link 32bits库和64bits库同时
Makefile, how to link 32bits library and 64bits library at the same time
我有两个库,一个叫liblits.so
,是32位的,另一个叫liblinx.a
,是64位的。我需要 link 它们,在我的 Makefile 中,添加 CFLAGS += "-m32"
后,我得到错误:
skipping incompatible liblinx.a when searching for -llinx
但是 liblits.so
没有错误。如果我删除 CFLAGS += "-m32"
(我的机器是 64 位),我得到错误:
skipping incompatible liblits.so when searching for -llits
但是 liblinx.a
没有错误。如何同时link 32位库和64位库?还是我必须有两个一致的库?
我的生成文件:
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 位库中的机器码是不兼容的——你有不同的指针大小,例如,导致对虚拟地址大小的不同期望 space 和类似的问题。
如何使 32 位指针可以寻址但 64 位库中的函数可以创建 32 位库中的函数已知的 4GB 之外的对象?这是不可能的,并且由于这些和许多其他原因,将 32 位和 64 位库链接到同一个二进制文件也是如此。
我有两个库,一个叫liblits.so
,是32位的,另一个叫liblinx.a
,是64位的。我需要 link 它们,在我的 Makefile 中,添加 CFLAGS += "-m32"
后,我得到错误:
skipping incompatible liblinx.a when searching for -llinx
但是 liblits.so
没有错误。如果我删除 CFLAGS += "-m32"
(我的机器是 64 位),我得到错误:
skipping incompatible liblits.so when searching for -llits
但是 liblinx.a
没有错误。如何同时link 32位库和64位库?还是我必须有两个一致的库?
我的生成文件:
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 位库中的机器码是不兼容的——你有不同的指针大小,例如,导致对虚拟地址大小的不同期望 space 和类似的问题。
如何使 32 位指针可以寻址但 64 位库中的函数可以创建 32 位库中的函数已知的 4GB 之外的对象?这是不可能的,并且由于这些和许多其他原因,将 32 位和 64 位库链接到同一个二进制文件也是如此。