首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Saxon CentOS8编译

Saxon CentOS8编译
EN

Stack Overflow用户
提问于 2020-03-10 07:51:08
回答 1查看 156关注 0票数 1

我试图评估萨克森-C1.2.1,他在CentOS8和安装似乎已经顺利。不过,通过cd samples/cppTests && build64-linux.sh尝试这些示例会导致大量编译错误,如下所示:

../../Saxon.C.API/SaxonProcessor.h:599:32:错误:除法‘sizeof of (JNINativeMethod*) /sizeof(JNINativeMethod)’不计算数组元素的数量-Werror=sizeof of-指针-div gMethods,sizeof of(GMethods)/gMethods);

在我简要地、可信地关闭-Werror=sizeof-指针-div之前,我检查了源代码,那里发生了什么看起来很可疑。

代码语言:javascript
复制
bool registerCPPFunction(char * libName, JNINativeMethod * gMethods=NULL){
    if(libName != NULL) {
        setConfigurationProperty("extc", libName);

    }

    if(gMethods == NULL && nativeMethodVect.size()==0) {
    return false;
    } else {
        if(gMethods == NULL) {
            //copy vector to gMethods
            gMethods = new JNINativeMethod[nativeMethodVect.size()];
        }
        return registerNativeMethods(sxn_environ->env, "com/saxonica/functions/>
    gMethods, sizeof(gMethods) / sizeof(gMethods[0]));


    }
    return false;
}

更具体地说,sizeof(gMethods) / sizeof(gMethods[0])似乎不会按任何幅度计算任何有用的东西。这样做的目的可能是输出一些与nativeMethodVect.size()值相同的代码,但我可能第一次看到了这个项目的源代码,我可能是误解了,实际上,这个划分是有意的吗?

在下面的例子中,我倾向于猜测意图实际上更接近b而不是a:

代码语言:javascript
复制
#include <cstdio>
struct test
{
    int x, y, z;
};
int main()
{
    test *a = new test[32], b[32];
    printf("%d %d\n", sizeof(a)/sizeof(a[0]), sizeof(b)/sizeof(b[0]));
    return 0;
}

它的输出为032,它被期望为(A)的大小,给出指针的大小,而不是数组的内存区域的大小。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-10 11:53:31

这段代码是为了支持XSLT样式表和XQuery查询中用户定义的扩展函数的特性。如果用户没有使用这些特性,那么他们就不需要这些代码了。实际上,用户定义的扩展函数仅在Saxon/C和Saxon/C中可用,因此不应该在Saxon/C代码库中。我创建了下面的bug问题来调查上面的错误和https://saxonica.plan.io/issues/4477的错误

我认为解决办法是,如果没有使用扩展函数特性,则要么删除有关代码,要么删除编译标志-Werror=sizeof-指针-div。

当时的意图如下:

代码语言:javascript
复制
jobject JNICALL cppNativeCall(jstring funcName, jobjectArray arguments, jobjectArray argTypes){
   //native call code here

}

JNINativeMethod cppMethods[] =
{
  {
     fname,
     funcParameters,
     (void *)&cppNativeCall
  }
};

bool nativeFound = processor->registerNativeMethods(env, "NativeCall",
cppMethods, sizeof(cppMethods) / sizeof(cppMethods[0]));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60613404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档