即使在添加 def 之后,外部“C”也会给出错误“不允许链接规范”。在头文件中?

Posted

技术标签:

【中文标题】即使在添加 def 之后,外部“C”也会给出错误“不允许链接规范”。在头文件中?【英文标题】:Extern "C" giving error "Linkage specification is not allowed" even after adding def. in header file? 【发布时间】:2015-06-25 12:19:41 【问题描述】:

这是我的 main.cpp 文件中的代码:

extern "C" JNIEXPORT jint JNICALL Java_SomefnHandling_Jni_1someInit (JNIEnv * env, jobject , jstring var1, jstring var2)

    //rest part of code in here

这是我的 main.h 文件中的定义:

#ifdef __cplusplus
extern "C" 
    #endif
    JNIEXPORT jint JNICALL Java_Someufnhandling_Jni_1someInit
        (JNIEnv *, jobject, jstring, jstring);

    #ifdef __cplusplus

#endif

这个程序从一个java文件中获取2个参数并使用jni接口传递给我的dll,但是在这个文件中我得到了错误:

不允许链接规范

我正在使用 VC++ 生成 DLL 文件,并试图从 SO 中找到相同的解决方案,但他们都提到只是添加 def。在你的头文件中。 即使这样做,错误仍然保持不变。 有什么想法吗?

【问题讨论】:

尝试将 main.cpp 中的函数定义放在 extern "C" 括号内,而不是将 extern "C" 放在同一行 已经试过了……不行…… 您是否打错字或转录错误?声明和定义的函数名不同,这几乎肯定不是你想要的。 naah dat one 在尝试运行的代码 m 中是正确的 【参考方案1】:

我删除了我在 main 函数中调用的方法,并将它放在 main 之外,然后它就开始像魅力一样工作了

【讨论】:

以上是关于即使在添加 def 之后,外部“C”也会给出错误“不允许链接规范”。在头文件中?的主要内容,如果未能解决你的问题,请参考以下文章

Django 给出“CSRF 令牌丢失或不正确”。即使在 POST 调用中传递它之后也会出错

即使正确设置了所有权限,Cloudkit 也会不断给出创建权限错误

Java:为啥即使路径完整,使用 file.exists() 也会给出错误值?

即使电子邮件有效,电子邮件检查也会给出错误消息

C即使分配了内存,修改链表的程序也会导致分段错误

React Typescript - 即使设置了最小值和最大值,Math.random 也会给出错误的结果