Ich bin ein wenig verwirrt beim Einrichten der Boost-Test-Bibliothek. Hier ist mein Code:Boost :: Test - Generierung von Main()?
#include "stdafx.h"
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE pevUnitTest
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_CASE(TesterTest)
{
BOOST_CHECK(true);
}
Mein Compiler generiert die wunderbar nützliche Fehlermeldung:
1>MSVCRTD.lib(wcrtexe.obj) : error LNK2019: unresolved external symbol _wmain referenced in function ___tmainCRTStartup
1>C:\Users\Billy\Documents\Visual Studio 10\Projects\pevFind\Debug\pevUnitTest.exe : fatal error LNK1120: 1 unresolved externals
Es scheint, dass die Boost-:: Test-Bibliothek ist nicht eine Funktion main() zu erzeugen - ich unter war der Eindruck es macht dies immer wenn BOOST_TEST_MODULE
definiert ist. Aber ... der Linker Fehler geht weiter.
Irgendwelche Ideen?
billy3
EDIT: Hier ist mein Code, um den Fehler unten in der richtigen Antwort beschrieben zu arbeiten:
#include "stdafx.h"
#define BOOST_TEST_MODULE pevUnitTests
#ifndef _UNICODE
#define BOOST_TEST_MAIN
#endif
#define BOOST_TEST_DYN_LINK
#include <boost/test/unit_test.hpp>
#ifdef _UNICODE
int _tmain(int argc, wchar_t * argv[])
{
char ** utf8Lines;
int returnValue;
//Allocate enough pointers to hold the # of command items (+1 for a null line on the end)
utf8Lines = new char* [argc + 1];
//Put the null line on the end (Ansi stuff...)
utf8Lines[argc] = new char[1];
utf8Lines[argc][0] = NULL;
//Convert commands into UTF8 for non wide character supporting boost library
for(unsigned int idx = 0; idx < argc; idx++)
{
int convertedLength;
convertedLength = WideCharToMultiByte(CP_UTF8, NULL, argv[idx], -1, NULL, NULL, NULL, NULL);
if (convertedLength == 0)
return GetLastError();
utf8Lines[idx] = new char[convertedLength]; // WideCharToMultiByte handles null term issues
WideCharToMultiByte(CP_UTF8, NULL, argv[idx], -1, utf8Lines[idx], convertedLength, NULL, NULL);
}
//From boost::test's main()
returnValue = ::boost::unit_test::unit_test_main(&init_unit_test, argc, utf8Lines);
//End from boost::test's main()
//Clean up our mess
for(unsigned int idx = 0; idx < argc + 1; idx++)
delete [] utf8Lines[idx];
delete [] utf8Lines;
return returnValue;
}
#endif
BOOST_AUTO_TEST_CASE(TesterTest)
{
BOOST_CHECK(false);
}
Hoffnung, dass jemand hilfreich ist.
billy3
Yup - das ist es. Das komische Ding ist --- ich verwende VC10 nicht - ich habe die Werkzeugkette eingestellt, um VS2008 zu benutzen - ich verwende nur VS2010 für seinen Herausgeber. Danke für dein psychisches Debugging. Ich arbeite jetzt an der letzten Option und werde hier posten, wenn es fertig ist. (App ist Unicode - kein Test ist es wert im ANSI-Modus) –
Mein Code oben hinzugefügt, falls Sie interessiert sind. –
In meinem Fall (VC++ 2008, Windows CE-Konsolenanwendung) war es einfacher, nur die Einstiegspunkt-Linkeroption von mainWCRTStartup zu mainCRTStartup zu ändern. –