【发布时间】:2010-03-17 16:52:51
【问题描述】:
我为两个编译器管理 JNI 项目:MSVC++ 8.0 和 9.0, 我的 cpp 文件包含以下实现: 外部“C”{ JNIEXPORT jlong JNICALL Java_context_ServiceProviderContext_StartServiceProvider (JNIEnv * env, jclass, jstring jspath){ ...... }
在depends.exe 实用程序的帮助下,我可以看到MSVC 8.0 按预期成功导出函数:Java_context_ServiceProviderContext_StartServiceProvider 但是在 MSVC 9.0 下编译让我发疯了,它的导出就像完全忽略 extern "C" 一样。 depends.exe 显示:_Java_context_ServiceProviderContext_StartServiceProvider@12
有人知道 9.0 项目中究竟是什么导致了这种行为吗?
【问题讨论】:
-
技术描述是您的 9.0 编译是名称修改。 C 没有命名混乱(这是
Extern C告诉编译器执行的操作的一部分)。 -
@Paul Nathan - 那么,你的建议是什么?
-
我没有真正的答案给你。它听起来像一个错误。现在需要声明那个或一个标志......我唯一能想到的就是在 MSDN 上翻找和/或致电 Microsoft 支持。
标签: c visual-c++ extern visual-c++-2008 name-decoration