타사 DLL을 사용하는 C 코드가 포함 된 R 확장명을 작성했습니다. 컴파일은 R 2.11.0을 사용하는 Rtools를 사용하여 Windows에서 수행됩니다. 내 계획은 DLL이 소스 패키지와 함께 배포되고 확장 프로그램의 src 디렉토리에 저장된다는 것입니다. 내 질문에 다음 어떻게 타사 DLL에 연결할 때 컴파일러에서 src 디렉터리를 찾는 발생할 수 있습니다.타사 DLL을 사용하여 R 확장명을 컴파일
현재, 나는 명령을 사용하여 패키지를 건물입니다 :
R CMD build --binary MyPackage
가 나는 또한 다음 줄에 파일 SRC / Makevars 있습니다
PKG_LIBS = -ldlxapi32
이 보장 타사 DLL이 , dlxapi32.dll은 컴파일에 포함됩니다. 그러나 내 패키지의 src 디렉토리가 표준 라이브러리 검색 경로의 일부가 아니므로 컴파일러는 DLL을 찾을 수 없습니다.
내가 SRC/Makevars 읽기를 변경하여이 문제를 해결하기 위해 노력했다 :
PKG_LIBS = -L$(CURDIR) -ldlxapi32
을하지만 이것은 다음과 같은 출력 실패 : 여기
gcc -shared -s -static-libgcc -o MyPackage.dll tmp.def dlx.o -L/cygdrive/c/DOCUME~1/abiel/LOCALS~1/Temp/Rbuild709236257/MyPackage/src -ldlxapi32 -Lc:/PROGRA~1/R/R-211~1.0/bin -lR
c:/mingw/bin/../lib/gcc/mingw32/4.5.0/../../../../mingw32/bin/ld.exe: cannot find -ldlxapi32
, 우리는 (CURDIR 그 $를 볼 수 있습니다) /cygdrive/c.DOCUME~1/... 나는 src 디렉토리의 실제 위치 인 C :/programming/r/MyPackage/src로 평가되기를 바랬다. 이 문제를 해결할 수있는 방법이 있습니까?
감사 더크 - 엘. 완벽하게 일했습니다. – Abiel
다른 디렉토리에 dll을 넣고 싶습니다 (예 :/wlibs/so -L ../ wlibs). 올바른 '설치된'위치 $ {R_LIBRARY_DIR}/$ {R_PACKAGE_NAME}에 복사되도록 정렬하십시오. }/libs /. R CMD 검사는 src /의 바이너리 파일에 대해 불평 할 것입니다. /cleanup.win은 복사를 할 수있는 한 곳입니다. 사용자가 PATH를 지정하면 설치된 dll을 검색 할 수 있어야합니다. 'R 확장 작성하기'섹션 1.2를 참조하십시오. –
좋은 지적. 한 번 비슷한 (내부, 작업 전용) 패키지를 작성하고 inst/file 디렉토리를 통해 패키지에 dll을 제공합니다. 나는 dyn.load()를 어디에서 기대할 것인가에 대해 이야기해야한다고 생각한다. 그것은 모두 작동하지만 약간의 조정이 필요했습니다. –