2017-08-25 21 views
5

Yükseltme birimi sınama belgelerinde, destek birimi sınama kitaplığı ile bağlantı kurmak için BOOST_TEST_DYN_LINK tanımlamanız gerektiğini özellikle belirtir. benim/kütüphane yollarını içerir ve kod iyi derler ama ben Visual Studio kullanarak artırmak birim testleri derlemek ve zaman onlara I çalıştırmayıBOOST_TEST_DYN_LINK öğesinin tanımlanması, Visual Studio'nun çökmesine neden olur.

#define BOOST_TEST_DYN_LINK 
#define BOOST_TEST_MODULE test_module1 

// This header is for the dynamic library, not the header only one 
#include <boost/test/unit_test.hpp> 

BOOST_AUTO_TEST_CASE(test1) { 
    BOOST_CHECK(true); 
} 

ben boost eklemiş:

Ben bu temel örnek kullanıyorum aşağıdaki hatayı alıyorum: ...

The application was unable to start correctly (0xc000003b).

sadece bu hata iletisi hiç ne kadar belirsiz ve yararlı işaret etmek gerekiyor gibi hissediyorum

Bazı nedenlerden dolayı, #define BOOST_TEST_DYN_LINK hattını kaldırırsam, kod derlenecek ve başarılı bir şekilde çalışacaktır, ancak bu destek belgelerinin söylediklerine doğrudan doğruya gider.

neden oluyor?


Ek bilgi:

Bu kullanıyorum budur:

boost v1_63_0

enter image description here

+1

Hata veya bilgiyi ekran görüntüsü olarak göndermeyin. Bunun yerine metin olarak gönderin. Ekran görüntüsünüz VS14 kullandığınızı, ancak VS13 ile etiketlendiğinizi gösteriyor. Ayrıca IDE sürümünü neden söylediğinizden emin değilsiniz. IDE! = Derleyici. MSVC sürümüne (VS ile birlikte gelen C/C++ derleyicisine) değinilmesi çok daha yararlı olacaktır. – tambre

+0

oops! Yanlış sürümü etiketledim. Bunu tamir edeceğim. – tjwrona1992

+0

Ve MSVC sürümü 14.0 – tjwrona1992

cevap

3

Kodunuzu çalıştırırken herhangi bir sorun yaşıyorum. Bu yüzden senin durumunda bir yapı sorunu olduğundan şüpheliyim.

bootstrap.bat 
.\b2.exe toolset=msvc -j 2 --with-test release link=shared stage 

Ardından yolunda bir yere kadar sahne \ lib altında dll kopyalamak ve uygun Boost dizinleri eklemeniz gerekir: My boost (Boost kaynak dizinine gidiş sonra) bu şekilde inşa edilmiştir

çevrenize

cl /EHsc /MD test.cpp 
.\test.exe 
+0

Destek kaynağını kendim yaptım, ancak bu arada bir hata yapmış olabilirim. Sanırım tekrar deneyeceğim. – tjwrona1992

0

Visual Studio kullanarak Sonra basitçe BOOST_TEST_DYN_LINK tanımlamaz.

Birimimiz ana dosyanın sadece içerir: Bu Visual Studio ve MinGw ikisini de kullanarak GCC ve Windows kullanmakta Linux iyi çalışır

#ifndef _MSC_VER 
#define BOOST_TEST_DYN_LINK 
#endif 
#define BOOST_TEST_MAIN 
#define BOOST_TEST_MODULE Main 
#include <boost/test/unit_test.hpp> 

.

+0

Kullanmayı planladığım çözüm buydu, ama merak ediyorum *** neden çalışmıyor? Herhangi bir yerde belgelenmiş bir neden bulamıyorum ve destek belgeleri "BOOST_TEST_DYN_LINK" tanımının çalışması için gerekli olduğunu söylüyor. – tjwrona1992

+0

Çözümün sizin için çalıştığına sevindim @ tjwrona1992. ** neden ** işe yaramazsa: Emin değilim. Soru etiketlerinizden birini "boost-test" olarak değiştirmenizi tavsiye eden birini bulmanızı öneririz ** neden ** ... – kenba

+0

Teşekkürler @kenba, Soruyu yeni etiketle güncelledim. – tjwrona1992

1

neden bu ilgili olarak: sorunsuz Sonra

set INCLUDE=%BOOST_ROOT%;%INCLUDE% 
set LIB=%BOOST_ROOT%\stage\lib;%LIB% 

Ben başarıyla test kodu inşa edebilirsiniz: my komut satırı ortamında, ben (eğer set BOOST_ROOT=C:\src\boost_1_65_1 gibi bir şey yapmış varsayarak) var şüphesiz, kodunuza hem statik hem de dinamik (dll) varyantlar ekliyorsunuz. Boost, derleyicinin otomatik bağlantı özelliğini kullandığı için MSVC'de bu olabilir. Otomatik bağlantıyı devre dışı bırakmak ve bağlantılı kitaplıklar üzerinde tam denetime sahip olmak için her zaman BOOST_ALL_NO_LIB kullanın.Özellikle, otomatik bağlantı kitaplıkları, kullanıldığında, bağlantı seçeneklerinde görünmez, bu da sorunları daha da zorlaştırır.

İlgili konular