2014-01-20 24 views
1

我們自己構建Tcl以便將我們自己編譯的二進制文件分發給應用程序。應用程序本身鏈接到Tcl庫並在內部使用API​​。針對自定義生成的tcl85.lib的鏈接器錯誤,針對ActiveState發行版的tcl85.lib

要構建Tcl,我們從http://sourceforge.net/projects/tcl/獲得源代碼,然後導航到/ win目錄,將buildall.vc.bat文件更改爲指向我們的MSVC安裝,然後運行該bat文件。建築按預期工作,輸出在/ win/Release_VC11中生成。更具體地說,生成了tcl85.lib和tcl85.dll。

當我們在我們的Qt C++應用程序中與這個.lib鏈接時,我們會遇到一堆鏈接器錯誤。例如:

commands.obj : error LNK2019: unresolved external symbol __imp_Tcl_AppendResult 
referenced in function "int __cdecl CallQMessageBox(void *,struct Tcl_Interp *, 
int,char * * const)" ([email protected]@[email protected]@[email protected]) 

然而,當我們對作爲ActiveState的TCL通訊的一部分提供的tcl85.lib文件鏈接,鏈接器沒有任何問題,並建立罰款。我們在兩種情況下驗證了它的Tcl完全相同版本。

我們正在使用MSVC 2012(快捷版)打造TCL,以及構建命令保持在buildall.vc.bat不變:

::set OPTS=threads 
if not %SYMBOLS%.==. set OPTS=symbols 
nmake -nologo -f makefile.vc release OPTS=%OPTS% %1 

我們一直在嘗試與不是運氣各種各樣的事情。

+0

看起來像鏈接庫的不同選項,這是我不是很瞭解(我工作在不同的平臺上)。 –

+0

只是一個念頭:你是在編譯ActiveTcl庫還是從源代碼編譯的庫? IIRC,你應該鏈接反對你編譯的... –

回答

1

好了,想通了:

我是建設的Tcl作爲一個32位二進制,而不是64位之一。

call "D:\tools\Microsoft Visual Studio 11.0\VC\bin\x86_amd64\vcvarsx86_amd64.bat" 

更換

call "D:\tools\Microsoft Visual Studio 11.0\VC\bin\vcvars32.bat" 

像這樣

nmake -nologo -f makefile.vc release OPTS=%OPTS% %1 MACHINE=AMD64 
在buildall.vc.bat

加入AMD64到NMAKE命令似乎已經解決了。

+1

Oooh,32bit/64bit肯定會做到這一點。 –

相關問題