2017-04-16 15 views
-1

我試圖創建在Windows環境下使用痛飲一個DLL文件爲embeddedR C程序。我使用下面的命令:找不到符號「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" 

我能夠加載與tclsh的
其他example.dll文件但我無法弄清楚我已經使用TCL 32 reason--位
我模塊文件名是和模塊名稱是embeddedRcall
我缺少的東西??? 我對TCL比較陌生,有人可以幫我。

回答

0

您的庫中應該有一個導出的(extern "C")函數符號,名稱與Embeddedrcall_Init類似;它是讓Tcl將庫安裝到特定解釋器實例中的入口點。 (它必須被明確地發現,因爲它需要一個參數。)默認情況下,該功能的名稱被改寫(munging)庫的名稱發現(帶版本號,案例轉換,追加_Init),但名稱的確定可以是由可選second argument to load覆蓋。

更確切地說,如果該條目實際上是所謂EmbeddedRCall_Init,你就必須與加載它:

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

注意的情況下區別! (另外,我們建議使用完全合格的路徑名來加載庫,因爲它避免了dlopen()系統一些複雜性。)

+0

即使負載embeddedRCall EmbeddedRCall加載同樣的錯誤被拋出。我錯過了什麼。請幫我解決問題。 – harika