作为一名 JAVA 开发人员(C 知识有限),我必须在 Linux 上为成像设备开发 SDK。
这是场景。设备 SDK 具有在 Windows (.dll) 和 Linux (.so) 上实现的共享库。两种实现中函数的名称和签名是相同的,即使两者只有一本参考手册。
它们提供了一些使用 JNI 调用本机方法的 Java 代码。由于 SDK 库中的函数不能被 JNI 直接调用,所以 SDK 也提供了一个 C 代码,以 JNI 调用它们的方式公开函数(它基本上是使用生成的头文件的实现) “javah”工具)。
现在我的问题是,这个暴露类似 JNI 功能的 C 代码是由供应商提供的,在 Windows 上测试和编译,所以我必须在 Linux 和过程中编译,做出必要的改变。
此时,我已经执行了以下 gcc 命令:
gcc -shared -o some.so some.c -I/usr/local/jdk1.7.0_40/include -I/usr/local/jdk1.7.0_40/include/linux -I/someSDKpath/Linux/Inc
编译器抛出此错误:
/someSDKpath/Linux/Inc/bioapi_type.h:195: 错误: '*' 标记之前的预期')'
这一行指的是:
typedef BioAPI_RETURN (BioAPI *BioAPI_ModuleEventHandler)
(const BioAPI_UUID *BSPUuid,
void* AppNotifyCallbackCtx,
BioAPI_DEVICE_ID DeviceID,
uint32 Reserved,
BioAPI_MODULE_EVENT EventType);
每次声明这种类型时都会发生错误。
我希望有人可以帮助我解决这个错误,或者给我一些成功完成这项工作的指导方针。
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::::
感谢Joni,我可以解决前一个问题。
现在我还有一个(重复)错误:
PvsApiJv.c:32:错误:在“mBioAPI_ModuleLoad”之前需要“=”、“,”、“;”、“asm”或“<strong>attribute”</p>
当出现以下情况之一时,每行都会生成这种错误:
static BOOL mBioAPI_ModuleLoad;
我可以将其更改为“int”并找到用 0 代替 False 和 1 代替 True 的用法吗?:::
INT mRegistScore = 0;
我不知道他们为什么除了“int”之外还使用“INT”来表示其他变量。我该如何进行呢?:::
extern __declspec(dllimport) BioAPI_RETURN BioAPI BioAPI_ModuleUnload();
我应该使用“IMPORT”还是“ attribute ((dllexport))”?搜索我发现了一些建议,但我不确定要申请什么。:::
CRITICAL_SECTION mGuiStateCS;
我知道的最后一个是特定的 Windows 类型。我可以用什么等价物代替?