我已经为我的渲染包装器创建了一个简单的linux 32位共享库(.so)但是当我认为我只能 通过32位应用程序使用它们....................
这就是我的代码的样子:
RendIFace.h:
//Basic renderer interface
struct Renderer
{
int type;
...other things
};
GLRend.c:
#include "RendIFace.h"
struct Renderer* GLRendererCreate(int width,int height,int bytesPerPixel)
{
struct Renderer* rend = (struct Renderer*)malloc(sizeof(Renderer));
rend->type = GLR;
..other things
return rend;
}
SDLRend.c:
#include "RendIFace.h"
struct Renderer* SDLRendererCreate(int width,int height,int bytesPerPixel)
{
struct Renderer* rend = (struct Renderer*)malloc(sizeof(Renderer));
rend->type = SDLR;
..other things
return rend;
}
我将两者编译为共享的32位库(.so)并通过主应用程序加载它们......
但现在有一个大问题。我的库都是32位并返回32位指针,这意味着我无法通过它们 64位应用程序,无需重建所有库代码库(!!!)。
所以我想问更有经验的人:我该如何处理这个问题?是否可以为这两种架构使用一个共享库?
答案 0 :(得分:9)
你必须保持一致。 64位应用程序只能使用64位库,而32位应用程序只能使用32位库。两者都有效;两种选择都很好,并且可以为两个系统编译相同的代码。
如果你选择'全部32位',请使用:
gcc -m32
如果你选择“所有64位”,请使用:
gcc -m64
有时,我会告诉make
C编译器是gcc -m32
(或-m64
),而不仅仅是gcc
,以确保在任何地方使用正确的值。< / p>
答案 1 :(得分:4)
你不能做你所要求的。您必须为同一架构编译最终可执行文件和任何库(静态和共享)。
在GCC上,可以通过直接在命令行中传递命令行参数-m32
或在CCFLAGS
中添加Makefile
来轻松完成此操作。
虽然可以在x86_64操作系统上运行x86代码(您只需要拥有所有正确的库及其各自的递归依赖项),但是在一个可执行文件或一个地址空间中,您不能组合x86和x86_64二进制文件