Makefile,如何同时链接32位库和64位库
Makefile, how to link 32bits library and 64bits library at the same time
我有两个库,一个称为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位库链接到同一个二进制文件也是不可能的。
相关文章:
- qmake:检测目标位宽(32 位或 64 位)
- C++中的24位到32位转换
- 使用 AVX2 将 8 位从 32 位值 (__m256i) 解压缩到__m256的最快方法
- 将 64 位整数中的每个其他位与 32 位整数进行比较
- 在QtMultimedia的QAudioFormat中为24位,32位和64位音频选择哪种样本类型(而不是大小)?
- 在 64 位和 32 位窗口中读取注册表
- 在 VS 移位中,UINT64 上的左移(64 >移位> 32)位仅 32 位
- MSVC:在64位代码中读取特定的64位或32位寄存器(例如R10)
- 加载/存储8位和32位之间的值
- C++ GetProcAddress 64 位返回 32 位地址
- 高效实现 64 位和 32 位无符号整数之间的双向映射
- 编写软件时 64 位优于 32 位的好处
- 什么数据类型是 16 位操作系统中的 32 位和 32 位操作系统中的 64 位
- 64位优于32位的QT和opengl
- 64位和32位整数
- 在 64 位(或 32 位)Windows 上以 32 位进程访问 >3,3,4GB 文件
- 在QT Creator .pro文件中检测64位vs 32位机器的任何方法
- 使用模板化的函数调用printf segfaults(仅64位,32位的valgrind clean)
- 在64位和32位系统上运行程序
- 64位兼容32位SetTimer Windows回调