簡體   English   中英

將Bullet物理和Boost一起編譯為靜態庫

[英]Compiling Bullet physics and Boost together as static libraries

我為名為Orbiter的太空飛行模擬器開發附加組件: http : //orbit.medphys.ucl.ac.uk/

它接受插件作為dll文件。 我最近制作了一個使用Bullet物理庫的插件。 它靜態鏈接到dll,因此,項目符號庫本身不是dll,而是直接編譯到插件中。 項目符號使用用於發布的多線程(/ MT)選項和用於調試的多線程調試(/ MTd)進行編譯

現在,我想使用Boost中的線程。 因此,我通過從Boost Pro安裝程序中選擇2個靜態選項安裝了靜態Boost庫。 我能夠使用這些靜態庫成功創建Win 32應用程序。 該應用程序還使用了多線程(/ MT)。 因此,我知道標志上沒有不匹配的地方。

但是,當我將Boost添加到也有Bullet的Orbiter dll插件項目中時,出現鏈接錯誤:

1> ------開始構建:項目:Bump,配置:Win32版本------

1> C:\\ Program Files(x86)\\ MSBuild \\ Microsoft.Cpp \\ v4.0 \\ Microsoft.CppBuild.targets(990,5):警告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(class type_info const&)”(?? 0type_info @@ AAE @ ABV0 @@ Z)已在LIBCMT.lib(typinfo)中定義.obj)

1> MSVCRT.lib(ti_inst.obj):錯誤LNK2005:“私有:class type_info&__thiscall type_info :: operator =(class type_info const&)”(?? 4type_info @@ AAEAAV0 @ ABV0 @@ Z)已定義.lib(typinfo.obj)1>創建庫F:\\ Orbiter \\ Orbitersdk \\ samples \\ BumpThreaded \\ Release \\ Bump.lib和對象F:\\ Orbiter \\ Orbitersdk \\ samples \\ 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編譯的。

在普通的win 32應用程序中,boost也可以正常工作,為什么將其靜態鏈接以輸出dll時出現問題?

我使用Visual Studio 2010 Express,並具有Windows 7 64位系統。

感謝您的任何幫助:)

如果您僅使用Boost和Bullet,並且它們都使用/MT進行了編譯,則必須是使用/MD Bump dll本身。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM