2012-11-27 56 views
2

我正在嘗試構建和修復UCL RAT以便在VS 2010編譯的窗口上運行。 我已經在Visual Studio 2010下成功編譯了TCL 8.5.12,並且主RAT可執行文件。在VS 2010下編譯的鏈接階段缺少符號

RAT使用TCL來驅動它的用戶界面。

的問題出現了,當我開始改變RAT嵌入通常存儲爲串入而不是使用zvfs一個zip文件的TCL代碼。目的是最終將zip嵌入到可執行文件的末尾,以儘量減少磁盤使用量和分發文件的數量。

於是我下載了一些代碼從TOBE項目zvfs,看看我是否可以用它來使這個過程更快(特別是zvfs.c文件基本上是zvfs擴展TCL)

這需要的Zlib爲了運行哪個內置集成精品。

但問題是zvfs代碼不與TCL正確鏈接。它通過編譯但在連接有下列錯誤:

與C/C++和我可能是這已經在窗口的更現代版本的固定RAT變得有些路障的鏈接經歷
2>zvfs.obj : error LNK2019: unresolved external symbol _TclOpenFileChannelInsertProc referenced in function _Zvfs_Init 
2>zvfs.obj : error LNK2019: unresolved external symbol _TclStatInsertProc referenced in function _Zvfs_Init 
2>zvfs.obj : error LNK2019: unresolved external symbol _TclAccessInsertProc referenced in function _Zvfs_Init 

不是。

RAT版本是來自UCL顛覆服務器最新的,zlib的是1.2.7版本,如果這有任何影響。

乾杯

回答

1

這些特定的功能是過時的,但是仍然支持在正確的積聚到Tcl的8.5(包括8.5.12)。您需要在清理版本的Tcl庫期間使用編譯器來定義預處理器符號USE_OBSOLETE_FS_HOOKS(作爲任何內容)。唉,這意味着你需要編輯遠離默認的構建說明,這就是我無法幫助的地方,因爲我使用了完全不同的構建鏈(在不同的平臺上)。

此外,鏈接,當你需要對Tcl庫本身,而不是它的存根庫鏈接。

+0

注意,代碼_will不ALL_從Tcl的8.6開始工作,因爲那些過時的功能已被刪除。 TOBE需要更新才能使用替代這些鉤子的VFS API。 –

+0

謝謝,這確實解決了我的鏈接問題,但從長遠來看,修改zvfs代碼以匹配新的tcl鉤子會更好。我仍然沒有設法讓RAT工作,但這不是zvfs代碼的錯誤,我懷疑tcl腳本本身需要更新。 – user1855149

+0

如果RAT對版本敏感,則最好回滾到8.4;這仍然是受支持的Tcl版本。 –