저는 XS 초보자이며 웹에서이 답변을 찾기 위해 시간을 보냈습니다. 문제는 XS가 함수의 이름을 변경하고 컴파일 할 때 정의되지 않은 참조 오류가 발생한다는 것입니다. 예를 들어 아래의 XS 코드 고려해perl xs module writing - 같은 xs 파일에서 다른 함수를 사용하십시오.
size_t
matrixIndex (colIndex, rowIndex,nCols,nRows)
size_t colIndex
size_t rowIndex
size_t nCols
size_t nRows
CODE:
size_t register i;
RETVAL = (rowIndex * nCols) + colIndex;
OUTPUT:
RETVAL
은 그때 그때 make
을 실행이
int
matrixCopyColumnVector_dbl (colIndex,fromMatrix,nColsMatrix,nRowsMatrix,intoVector,nRowsVector)
size_t colIndex
SV * fromMatrix
size_t nColsMatrix
size_t nRowsMatrix
SV * intoVector
size_t nRowsVector
CODE:
size_t register x, n;
if(nRowsVector != nRowsMatrix) { RETVAL = 0; return RETVAL; }
n = 0;
for(x=0; x<= nRowsMatrix; x++) {
intoVector[n] = fromMatrix[matrixIndex /*USE OF FUNCTION HERE!!*/(colIndex,x,nColsMatrix,nRowsMatrix)];
n++;
}
RETVAL = 1;
return RETVAL;
OUTPUT:
RETVAL
처럼 다음과 같은 기능이 사용하려고하고 그것을 컴파일 과정을 통해 이동하고 오류가 발생합니다 연결 단계 인 것으로 보이는 부분은 undefined reference to 'matrixIndex'
입니다.
그래서 같은 XS 파일 내에서 함수를 호출하는 표준 XS 방식이 궁금합니다.
XS 함수 (파일의 앞부분에있는 C 함수와 반대)를 호출하려면 Perl 하위 함수로 호출해야합니다. XS 함수로 만들지 말고 C 함수로 만듭니다. – ikegami