Polish

Najlepszy Sposób Rozwiązywania Problemów Z Błędami łączenia Wątków

Jeśli pojawi się błąd „błąd linku push-link”, dopóki ten post na blogu nie będzie tutaj – pomóż.

Czy Twój komputer sprawia Ci problemy? Spokojnie, jest poprawka! Kliknij tutaj, aby pobrać.

Podczas próby stworzenia standardowego Boost :: przykładu miejsca znalezionego w Internecie, otrzymuję kilka przeszkód bezpośrednio z bazy danych thread_data.hpp Boost, do której nie mogę bezpośrednio zmapować, po prostu może być prawdopodobnie związany z Pchnięciem. (Właściwie kupuję te same błędy w moim prawdziwym programie, ale używam każdego przykładowego kodu, aby upewnić się, że ta sytuacja nie stanowi problemu w konkretnym kodzie.)

Oto kod słyszalny, który znalazłem dla Boost :: Samouczek wątku:

  #include    # upewnij się, że otrzymujesz    #include     funkcja gap worker ()            boost :: posix_time :: chwile czas pracy (3);        an std :: cout << "pracownik: biegnie" << an std :: endl;        // Wyobraź sobie, że większość ludzi śledzi coś pożytecznego...        bump :: this_thread :: idź do łóżka (czas pracy);        std :: koszt << "pracownik: gotowy" << std :: endl;        int main (int argc, char 3. argv [])            std :: cout << "main: uruchomienie" << std :: endl;        wsparcie :: wątek workerThread (workerFunc);        choroba przenoszona drogą płciową :: cout << "główna: umiera, aby opuścić strumień" << choroba przenoszona drogą płciową :: endl;        pracownikWątek.dołącz ();        an std :: cout << "main: gotowe" << std :: endl;        Zwraca 0;     
  mingw32-g ++. exe -LC: building  boost  lib -u bin  Debug  Guardian.exe obj  Debug  Scratch.o -lboost_filesystem-mgw47-mt-1_53 -lboost_system-mgw47 -mt -1_53 -lboost_date_time-mgw47-mt-1_53 -lboost_thread-mgw47-mt-1_53 
  C:  projects  bump  include  boost-1_53  augment  thread  win32  thread_data.hpp | 123 | niezdefiniowane odniesienie, które `_imp ___ ZTVN5boost6detail16thread_data_baseE '| 

Na ich rynku CodeBlocks, wiersz 123 ogólnie tagu h2 thread_data file.hpp jest znany jako źródło głównego błędu:

  // # jeśli określono BOOST_THREAD_PROVIDES_INTERRUPTIONS            Zobacz także przerwanie_uchwytu (create_anonymous_event (szczegóły :: win32 :: manual_reset_event, specyfikacja :: win32 :: event_initial_reset))            , przerwanie_włączone (prawda) 

Zapomniałem połączyć odmianę? Używam Boost w zasadzie bez problemu, gdy próbowałem użyć puli wątków. Jestem nowy w Boost i nie mam pojęcia, co może powodować ten typ błędu.

zwiększ ostrożnie błąd konsolidatora

  bjam --toolset jest równy gcc --with-thread-level 

Za każdym razem, gdy szukam możliwości użycia Boost.Thread, proszę o niezdefiniowane skierowania, mimo że buduję do niego link zwrotny. Nie dotyczy to innych bibliotek wzmacniających, takich jak Regex lub System.

 > v ++ main.cpp -I. -L. -lboost_thread-mgw45-mt-1_46_1C: UsersjhasseAppDataLocalTempccjYfDox.o: main.cpp :(. Tekst + 0xf): niezdefiniowane źródło do `_imp___ZN5boost6thread20hardware_concurrencyEv 'Collect2: ld zmniejszył stan główny wyjścia 1 
  #include wewn. hpp># wciel się w zleceniodawcę ()    choroba przenoszona drogą płciową :: cout << wzmocnienie :: wątek :: hardware_concurrency () << an std :: endl; 

Od niedawna zajmuję się mnożeniem strumieni i jestem osobą, która przygotowała prostą demonstrację tego, co znalazłem:

  #include #include #include void workerFunc ()      boost :: posix_time :: secs workTime (3);    an std :: cout << "pracownik: bieganie" << choroba przenoszona drogą płciową :: endl;        opłata :: this_thread :: sen (czas pracy);    std :: koszt << "pracownik: gotowy" << std :: endl;     int wiodący (int argc, char * argv [])      an std :: cout << "main: uruchomienie" << an std :: endl;    ulepszenie :: wątek workerThread (workerFunc);    std :: cout << "główna: szansa na strumień" << choroba przenoszona drogą płciową :: endl;    pracownikWątek.dołącz ();    choroba przenoszona drogą płciową :: cout << "main: gotowe" << an std :: endl;    Zwraca 0; 

Kompiluję go po wykonaniu w ++ -Wall -I $ (BOOST) / może zawierać -L $ (BOOST) / lib dla każdego -lboost_system test.cpp i mam dostęp do następujących błędów:

  /tmp/ccp180QW.o: W funkcji `__static_initialization_and_destruction_0 (int, int) ':test.cpp :(.text + 0x160): niezdefiniowane odniesienia do `boost :: schema :: generic_category() 'test.cpp :(. treść tekstowa + 0x16c): niezdefiniowane odniesienie do `boost :: circle :: generic_category () 'test.cpp :(. texting + 0x178): niezdefiniowane odniesienie do `boost :: system :: system_category () '/tmp/ccp180QW.o: In Char funkcja `boost :: thread_Exception :: thread_Exception (int, const *) ':test.cpp :(. text._ZN5boost16thread_exceptionC2EiPKc [_ZN5boost16thread_ExceptionC5EiPKc] + 0x14): tylko odniesienie zdefiniowane podczas zakupu `boost :: system :: system_category () '/tmp/ccp180QW.o: W funkcji `boost :: szczegóły :: thread_data_base :: thread_data_base() ':test.cpp :(. text.Undefined _zn5boost6detail16thread_data_basec2ev [_zn5boost6detail16thread_data_basec5ev] + 0x24): Link, jeśli potrzebujesz każdej `tabeli v do wzmocnienia :: detail :: thread_data_base '/tmp/ccp180QW.o: W itbones `boost :: this_thread :: sleep (boost :: posix_time :: ptime const &) ':test.cpp :(. text._ZN5boost11this_thread5sleepERKNS_10posix_time5ptimeE [boost :: this_thread :: relax (boost :: posix_time :: ptime undefined const &)] + 0x3e): odniesienie podczas używania `boost :: hiden_thread timespec & & &) _ ten_th '/tmp/ccp180QW.o: W tej funkcji `boost :: thread :: start_thread() ':test.cpp :(. text._ZN5boost6thread12start_threadEv [boost :: sznurek :: start_thread ()] + 0x15): nie w twoim teście życia zdefiniowanym dla `boost :: bond :: start_thread_noexcept () '/tmp/ccp180QW.o: W wątku `boost :: :: ! funkcja wątku ():test.cpp :(. text._ZN5boost6threadD2Ev [_ZN5boost6threadD5Ev] + 0x15): niezdefiniowane odniesienia do `wzmocnienia :: wątku :: odłącz ()'/tmp/ccp180QW.o: W `boost :: miejsce :: get_id () const 'atrybut:test.cpp :(.text.Const] + 0x18): _znk5boost6thread6get_idev [wzmocnienie :: linia :: get_id () niezdefiniowane odniesienie do `wzmocnienia :: wątku :: native_handle () '/tmp/ccp180QW.o: W funkcji `boost :: bond :: join() ':test.cpp :(. text._ZN5boost6thread4joinEv [boost :: wątek :: logowanie ()] + 0x6d): brak zdefiniowanej referencji w trakcie `boost :: wątek :: join_noexcept ()'/tmp/ccp180QW.o: W funkcji `boost :: detail :: thread_data  :: ~ thread_data () ':test.cpp :(. text._ZN5boost6detail11thread_dataIPFvvEED2Ev [_ZN5boost6detail11thread_dataIPFvvEED5Ev] + 0x1f): brak zdefiniowanego formularza dla `boost :: szczegóły :: thread_data_base :: ~ thread_data_base () '/tmp/ccp180QW.o:(.rodata._ZTIN5boost6detail11thread_dataIPFvvEEOuverntypeinfo podczas doładowania :: szczegóły :: thread_data ] + 0x10): przebieg niezdefiniowany w `typeinfo na zachętę :: szczegółowo :: thread_data_base 'Collect2: ld zrobił comeback 1 status wyjścia 

Używam Boost w wersji 1.55 wewnątrz dodatku do 4.6.1 z gcc i Ubuntu 11.10. czego mi brakuje?

Na tym końcu prawdopodobnie spróbujesz zmienić kolejność identyfikatorów bibliotek.

Zalecane

Zadbaj o to, aby Twój komputer działał jak nowy dzięki Reimage — najlepszemu oprogramowaniu do rozwiązywania błędów systemu Windows. Nigdy więcej przerażających niebieskich ekranów, żadnych zawieszających się aplikacji — po prostu płynne i wydajne działanie komputera. Dzięki łatwemu rozwiązaniu typowych problemów z systemem Windows jednym kliknięciem, Reimage jest niezbędną aplikacją dla każdego, kto chce utrzymać swój komputer w najlepszym stanie.

  • Krok 1: Pobierz i zainstaluj oprogramowanie Reimage
  • Krok 2: Uruchom program i wybierz swój język
  • Krok 3: Postępuj zgodnie z instrukcjami wyświetlanymi na ekranie, aby rozpocząć skanowanie komputera w poszukiwaniu problemów

  • Próbowałem (Boost jest już w moim linkerze, a także w domyślnej ścieżce, więc nie muszę określać dokładnego linkera i lokalizacji, tylko kilka nazw baz danych) i zadziałało dla mnie:

      g ++ -Test ściany.-o test cpp -lboost_system -lboost_thread 
      w ++ -Wall -I rrr (BOOST) / include test.cpp -o test -L $ (BOOST) / lib -lboost_system -lboost_thread 

    Zrobiłem tak, jak pokazałeś i napotkałem ten sam błąd, co ty.

    Alternatywnie, mogą to zrobić indywidualnie (i nieco bardziej oczywiste, nadal chcesz wziąć pod uwagę korzyści z tego, jeśli klienci posiadają więcej niż jeden główny plik poboczny), dzieląc kroki systemu linków w następujący sposób:

    – p>
    błąd konsolidatora wątków doładowania

      g ++ -c -Wall -u test.o test.cppg ++ test.o -o zredukowany przykład -lboost_system -lboost_thread 

    -m w linii przed wszystkim innym niż te mówi g++, aby tylko dołączył obiekt kompilacji, a nie dowiązał.

    Napraw teraz swój komputer. Nie są wymagane żadne umiejętności techniczne. Pobierz teraz.

    Boost Thread Linker Error
    Boost Thread Linker Fout
    부스트 스레드 링커 오류
    Aumentar El Error Del Enlazador De Subprocesos
    Boost Thread Linker Fel
    Booster L Erreur De L Editeur De Liens
    Fehler Beim Boost Thread Linker
    Povysit Oshibku Komponovshika Potokov
    Aumenta L Errore Del Linker Del Thread

    You may also like...