Postanowiłem zaktualizować moje biblioteki boost z 1.61 do 1.63, a w projekcie, który zaktualizowałem do korzystania z nowych plików, otrzymuję kilka nowych komunikatów o błędach, których nie miałem. t coraz wcześniej:LNK2001: Moje biblioteki boost są (prawdopodobnie) zbudowane niepoprawnie
error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::system_category(void)" ([email protected]@[email protected]@[email protected]@XZ)
error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::generic_category(void)" ([email protected]@[email protected]@[email protected]@XZ)
od moich 1,63 biblioteki są kompilowane przy użyciu programu Visual Studio 2017, mój pierwszy założeniem jest to, że zrobiłem błąd kompilacji biblioteki Boost, więc tutaj są całkowite kroki biorę od czyste rozpakowanie plików boost:
- Menu Start → Visual Studio 2017 RC → Komenda programisty d Podpowiedź
- Zmieniam katalog, dopóki nie znajdę się w folderze wysokiego poziomu
boost_1_63_0
. - biegnę
bootstrap.bat
- otworzyć
project-config.jam
edycji - zmienić
using msvc ;
dousing msvc : 14.1 : E:\Program Files\Microsoft Visual Studio\VC\Tools\MSVC\14.10.24911\bin\HostX64\x64\;
- otworzyć
boost/config/auto_link.hpp
edycji - robię zmienił się do tego pliku (kod podany poniżej po wykazie)
- W otwartym wierszu polecenia wykonuję polecenie:
b2 architecture=x86 address-model=64 link=static threading=multi runtime-link=shared --build-type=complete stage --stagedir=stage/x64 -a
- Kończy się następującym komunikatem na końcu (wymienionym poniżej na rufie) er lista)
- Próbuję użyć tych bibliotek z moim kodem, używając
#define BOOST_LIB_DIAGNOSTIC
do śledzenia, że używane są właściwe pliki (są). - Próbuję skompilować mój projekt, który używa boost.asio, i uzyskać dwa nierozwiązane zewnętrzne błędy symboli wymienione powyżej.
Czy ktoś wie, gdzie jest mój błąd? Błędy te nie występują, jeśli korzystam z bibliotek doładowania 1.61 skompilowanych przy użyciu Visual Studio 2015 w Visual Studio 2017 RC.
auto_link.hpp (stary):
# elif defined (BOOST_MSVC)
// vc14:
# define BOOST_LIB_TOOLSET "vc140"
auto_link.hpp (nowy):
# elif defined (BOOST_MSVC) && (BOOST_MSVC < 1910)
// vc14:
# define BOOST_LIB_TOOLSET "vc140"
# elif defined (BOOST_MSVC)
// vc15:
# define BOOST_LIB_TOOLSET "vc141"
wiadomość na koniec procesu doładowania kompilacji:
...failed updating 6 targets...
...skipped 4 targets...
...updated 904 targets...
Bibliotek pokazano za pomocą #define BOOST_LIB_DIAGNOSTIC
:
1>Linking to lib file: libboost_system-vc141-mt-1_63.lib
1>Linking to lib file: libboost_date_time-vc141-mt-1_63.lib
1>Linking to lib file: libboost_regex-vc141-mt-1_63.lib
Daj mi znać, jeśli potrzebujesz innych informacji diagnostycznych. Próbowałem komentować różne zastosowania biblioteki boost.asio, ale usunięcie nagłówka całkowicie wyeliminowało te problemy (co oczywiście spowodowało, że komponenty doładowania były bezużyteczne).
Nie jestem pewien, czy ma to coś wspólnego z błędami, ale ścieżka do zestawu narzędzi 'msvc' wygląda dziwnie: jest w' Program Files', a nie 'Programie Pliki (x86) ', tak jakbyś był w 32-bitowym systemie Windows, ale żądasz 64-bitowego natywnego kompilatora (' HostX64'). Skrót "Developer Command Prompt" odpowiada także 'HostX86 \ x86' (32-bitowy kompilator budujący 32-bitowy kod). Aby uzyskać 64-bitowy kompilator budujący 64-bitowy kod, należy użyć skrótu 'x64 Native Tools Command Prompt'. Może to jakoś zagmatwało skrypty budujące? – bogdan
Po prostu na offchance, nie używasz plików nagłówkowych starej wersji boost podczas łączenia z nowym jesteś? Być może trzeba będzie zaktualizować ścieżkę preprocesora do nowego pasującego boostu? – Vality
@bogdan Kiedy instaluję pliki na dysku 'E: /', zazwyczaj zmuszam je do zainstalowania w folderze 'Program Files', niezależnie od tego, czy chce używać przyrostka (x86), czy też nie. A ponieważ zrobiłem to dla VC2015 i VC2107, nie sądzę, że to problem. Zajmę się jednak użyciem x64 Native Tools Command Prompt i zobaczę, czy działa, czy nie. – Xirema