CentOS8에서 Saxon-C 1.2.1 HE를 평가하려고하는데 설치가 잘 된 것 같습니다. 샘플을 시도 cd samples/cppTests && build64-linux.sh
하면 다음과 같은 조정에 수많은 컴파일 오류가 발생합니다.
../../Saxon.C.API/SaxonProcessor.h:599:32 : error : division 'sizeof (JNINativeMethod *) / sizeof (JNINativeMethod)'는 배열 요소의 수를 계산하지 않습니다 [-Werror = sizeof-pointer -div] gMethods, sizeof (gMethods) / sizeof (gMethods [0]));
요약하고 신뢰할 수있게 끄기 전에 -Werror = sizeof-pointer-div 소스 코드를 확인했고 거기에서 무슨 일이 벌어지고 있는지 모호해 보입니다.
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()
었지만 처음 으로이 프로젝트의 소스를 보는 것은 착각 할 수 있으며 분할은 실제로 의도적입니까?
나는 의도가 실제로 다음 예에서 a보다 b에 더 가깝다고 추측하는 경향이 있습니다.
#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;
}
sizeof (a)로 예상되는 0 32 출력은 배열의 메모리 영역 크기가 아닌 포인터 크기를 제공합니다.
이 코드는 XSLT 스타일 시트 및 XQuery 쿼리에서 사용자 정의 확장 기능 의 기능을 지원하는 것입니다 . 사용자가 이러한 기능을 사용하지 않는 경우 해당 코드가 필요하지 않습니다. 실제로 사용자 정의 확장 함수는 Saxon-PE / C 및 Saxon-EE / C에서만 사용할 수 있으므로 Saxon-HE / C 코드베이스에 있으면 안됩니다. 위의 오류를 조사하고 https://saxonica.plan.io/issues/4477에 다음 버그 문제를 만들었습니다.
해결 방법은 확장 기능 기능이 사용되지 않는 경우 문제의 코드를 제거하거나 컴파일 플래그 -Werror = sizeof-pointer-div를 제거하는 것입니다.
의도는 다음과 같습니다.
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]));
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다