0

我開發一個名爲航天飛機太空飛行模擬器插件一起升壓:http://orbit.medphys.ucl.ac.uk/編譯Bullet物理和靜態庫

它接受插件,dll文件。我最近做了一個使用Bullet物理庫的插件。它靜態鏈接到DLL,所以子彈庫本身不是一個DLL,但編譯到插件。 Bullet使用多線程(/ MT)選項進行編譯,並使用多線程調試(/ MTd)進行調試

現在我想使用來自Boost的線程。所以我通過從Boost Pro安裝程序中選擇2個靜態選項來安裝靜態Boost庫。我能夠用這些靜態庫成功創建一個Win 32應用程序。該應用程序也使用了多線程(/ MT)。所以我知道這些標誌沒有不匹配。

然而,當我添加加速到我的軌道飛行器DLL插件項目,其中也有子彈,我得到一個鏈接錯誤:

1> ------構建開始:項目:凹凸,配置:發行Win32 ------

1> C:\ Program Files(x86)\ MSBuild \ Microsoft.Cpp \ v4.0 \ Microsoft.CppBuild.targets(990,5):warning MSB8012:TargetPath(F: \ Orbiter \ Orbitersdk \ samples \ BumpThreaded \ Release \ Bump.dll)與鏈接器的OutputFile屬性值(F:\ Orbiter \ Modules \ Plugin \ Bump.dll)不匹配。這可能會導致您的項目構建不正確。要解決此問題,請確保$(OutDir),$(TargetName)和$(TargetExt)屬性值與%(Link.OutputFile)中指定的值匹配。

1> MSVCRT.LIB(ti_inst.obj):錯誤LNK2005: 「私人:__thiscall TYPE_INFO :: TYPE_INFO(類TYPE_INFO常量&)」(?? 0type_info @@ @ AAE @@ ABV0 Z)已經在LIBCMT定義的.lib(typinfo.obj)

1> MSVCRT.LIB(ti_inst.obj):錯誤LNK2005: 「私人:類TYPE_INFO & __thiscall TYPE_INFO ::運算=(類TYPE_INFO常量&)」(?? 4type_info @@ (typinfo.obj) 1>創建庫F:\ Orbiter \ Orbitersdk \ samples \ BumpThreaded \ Release \ Bump.lib和對象F:\ Orbiter \ Orbitersdk \ samples \已經在LIBCMT.lib中定義了AAEAAV0 @ ABV0 @@ Z) BumpThreaded \ Release \ Bump.exp

1> LINK:警告LNK4098:defaultlib'MSVCRT'與使用其他庫相沖突;使用/ NODEFAULTLIB:library 1> ...... \ Modules \ Plugin \ Bump.dll:致命錯誤LNK1169:找到一個或多個乘法定義的符號

==========構建: 0成功,1失敗,3最新,0跳過==========

從我在其他問題上閱讀,這可能是由於2個庫的標記不匹配一個應用程序。但這不是這裏的情況。 Bullet和Boost都是用/ MT編譯的。

也提高工作正常贏得32應用程序,所以爲什麼問題時,靜態鏈接它輸出一個DLL?

我使用visual studio 2010 express,並有一個Windows 7 64位系統。

感謝提前:)

回答

0

任何幫助,如果你只使用Boost和子彈,而這些都與肯定編譯/MT,那麼它必須是使用/MD您的凹凸DLL本身。

+0

嗯是的,我通過將其設置爲/ MT來檢查,同樣的錯誤。無論如何,我使用Win32爲自己推出了一個線程類和關卡,臨界區等,所以我會在稍後嘗試整合Boost。 – 2012-04-30 03:50:54

+0

你正在鏈接的庫之一*有*是錯的。某處你有一個用'/ MD'構建的lib。你可以嘗試卸載boost,然後從源代碼構建boost而不是安裝它。構建起來非常簡單,並且不需要進行安裝。 – Fraser 2012-04-30 08:21:47