1

私はAndroidプロジェクトにfreeimage.soを使用していますが、Cコードからこのライブラリを参照するにはどうすればよいですか?またはこのライブラリの関数にアクセスする必要がありますか?詳細:プロジェクトのarmeabiフォルダに関数を配置しました貴重な提案をお願いします貴重な努力をよろしくお願いします

4

1 に答える 1

2

.so は動的ライブラリ (別名共有オブジェクト) であり、静的ライブラリではありません。

C コードから直接 .so ファイルを使用するには、dlfcn POSIX API を使用できます。WinAPI の LoadLibrary/GetProcAddress と同じです。

#include <dlfcn.h>

// sorry, I don't know the exact name of your FreeImage header file
#include "freeimage_header_file.h"

// declare the prototype
typedef FIBITMAP* ( DLL_CALLCONV* PFNFreeImage_LoadFromMemory )
         ( FREE_IMAGE_FORMAT, FIMEMORY*, int );

// declare the function pointer
PFNFreeImage_LoadFromMemory LoadFromMem_Function;

void some_function()
{
    void* handle = dlopen("freeimage.so", RTLD_NOW);

    LoadFromMem_Function = 
            ( PFNFreeImage_LoadFromMemory )dlsym(handle, "FreeImage_LoadFromMemory" );

    // use LoadFromMem_Function as you would use
    // statically linked FreeImage_LoadFromMemory
}

静的なものが必要な場合はlibfreeimage.a、リンカー命令をフェッチ (または自分でビルド) して追加します-lfreeimage

于 2012-07-26T09:10:30.863 に答える