1

レンダリング ラッパー用に単純な 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 ビット アプリケーションでそれらを使用することはできません (!!!)。

そこで、経験豊富な方にお聞きしたいのですが、この問題をどのように処理すればよいでしょうか? 両方のアーキテクチャで単一の共有ライブラリのみを使用することは可能ですか???

4

2 に答える 2

11

一貫性を保つ必要があります。64 ビット アプリケーションは 64 ビット ライブラリのみを使用でき、32 ビット アプリケーションは 32 ビット ライブラリのみを使用できます。どちらも機能します。どちらを選択してもかまいません。両方のシステムで同じコードをコンパイルすることも可能です。

「すべて 32 ビット」を使用する場合は、次を使用します。

  • gcc -m32

「すべて 64 ビット」を使用する場合は、次を使用します。

  • gcc -m64

makeときどき、 C コンパイラがgcc -m32(または-m64) であることを伝えることがあります。単にgcc正しい値がどこでも使用されるようにするためではありません。

于 2012-04-06T06:33:52.683 に答える