我在我的android项目中使用freeimage.so,如何从C代码中引用这个库?或者是否需要访问这个库中的函数?更多信息:我已将该功能放在项目中的armeabi文件夹中请向我提供您的宝贵建议提前感谢您的宝贵努力
问问题
182 次
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 回答