2017-04-16 7 views
-1

Windows 환경에서 임베디드 C 프로그램 용 swig를 사용하여 dll 파일을 만들려고합니다.심볼 "Embeddedrcall_Init"을 찾을 수 없습니다

C:\swigwin-3.0.12\Examples\r\Z>swig -c++ -tcl embeddedRCall.i 
C:\swigwin-3.0.12\Examples\r\Z>gcc -c embeddedRCall.c -I/swigwin-3.0.12/Examples/r/Z 
C:\swigwin-3.0.12\Examples\r\Z>gcc -c embeddedRCall_wrap.c -I/Tcl/include/tcl8.6 -I/swigwin-3.0.12/Examples/r/Z 
C:\swigwin-3.0.12\Examples\r\Z>gcc -shared embeddedRCall.o embeddedRCall_wrap.o -o embeddedRCall.dll -L/Tcl/lib -L/R/R-3.3.2/bin/i386 -lR -lRblas -lRiconv -lRlapack -ltcl86 
% load embeddedRCall 
cannot find symbol "Embeddedrcall_Init" 

나는 이미 TCL (32) 사용하고있는 reason--을 알아낼 수 없습니다 그러나 나는 tclsh
와 다른 example.dll 파일을로드 할 수 있었다 비트
내 모듈 : 나는 아래의 명령을 사용하고 파일 이름은이고 모듈 이름은 embeddedRcall입니다
나는 뭔가를 놓치고 ??? 나는 TCL에 비교적 새로운 누군가가 나를 도울 수있다.

답변

0

라이브러리에 내 보낸 (extern "C") 기능 기호가 있어야합니다 (예 : Embeddedrcall_Init). Tcl이 라이브러리를 특정 인터프리터 인스턴스에 설치할 수있게 해주는 진입 점입니다. (인수를 취하기 때문에 명시 적으로 찾아야합니다.) 기본적으로 함수의 이름은 라이브러리의 이름 (스트립 버전 번호, 대/소문자 변환, _Init을 추가 함)에 의해 발견되지만 이름의 결정은 다음과 같을 수 있습니다. (선택 사항)에 의해 재정의됩니다.second argument to load. 항목이 실제로 EmbeddedRCall_Init를 호출하면

는 당신이 그것을로드 할 것, 더 정확하게하려면

load embeddedRCall EmbeddedRCall 
# The _Init suffix is fixed when loading into a standard interp 

참고 경우 차이! 또한 dlopen() 시스템의 일부 복잡성을 피하기 위해로드 된 라이브러리에 완전한 경로 이름을 사용하는 것이 좋습니다.

+0

로드가 임베드 된 상태로로드 된 경우에도 동일한 오류가 발생합니다. 나는 아무것도 놓쳤다. 문제를 해결하려면 저를 도우십시오. – harika