Linux(gcc)中混合使用32位和64位库

Linux(gcc)中混合使用32位和64位库,gcc,32bit-64bit,Gcc,32bit 64bit,我有一个为Linux(使用gcc)构建的32位纯二进制C.so(由供应商提供),因此我需要链接到一个64位C/C++应用程序(我正在开发)。有没有办法从我的应用程序访问此库 我知道在处理函数中的参数和指向函数的指针时需要特别小心。所以,我知道很久以前人们认为这基本上是不可能的(比如post)。我希望情况已经改变。可能会拼凑一些汇编程序粘合代码,将函数参数和返回值从一个模块转换到另一个模块,并翻转处理器模式。可能会对链接器进行黑客攻击,这样它就不会立即拒绝它(或者对.so文件进行黑客攻击,这样链接

我有一个为Linux(使用gcc)构建的32位纯二进制C.so(由供应商提供),因此我需要链接到一个64位C/C++应用程序(我正在开发)。有没有办法从我的应用程序访问此库


我知道在处理函数中的参数和指向函数的指针时需要特别小心。所以,我知道很久以前人们认为这基本上是不可能的(比如post)。我希望情况已经改变。

可能会拼凑一些汇编程序粘合代码,将函数参数和返回值从一个模块转换到另一个模块,并翻转处理器模式。可能会对链接器进行黑客攻击,这样它就不会立即拒绝它(或者对.so文件进行黑客攻击,这样链接器就不知道了)。您必须教64位动态链接器如何进行32位重定位,等等

但是,当您击中32位范围之外的指针时会发生什么情况?说到这里,如果32位代码在64位地址加载,会发生什么?现在,内核必须被教导在低内存地址中加载这个64位程序,这就违背了将其设为64位的初衷

然后,您必须安排该库与32位libc进行链接,但是在一个项目中使用两个libc可能会被破坏。也许32位库可以使用64位libc?但是,现在你需要担心的不仅仅是函数参数:系统类型都是错误的大小。嗯,内核对来自32位和64位进程的系统调用的响应可能不同。不太好

(而且,我甚至不确定在没有内核帮助的情况下是否可以在32位和64位ISA之间切换?)

不,我很确定这几乎是不可能的,没有人愿意做这项工作。而且,随着64位和32位的世界变得越来越少,越来越不有趣,情况改变的可能性越来越小,而不是越来越大

IPC选项听起来不太有趣。如果我是你,我会认真地问为什么我的新项目必须是64位的