Portuguese

Melhor Maneira De Solucionar Erros Do Linker Do Boost De Thread

Se você receber todos os erros de “erro de link de push”, esta postagem na rede está aqui para ajudar.

Seu PC está dando problemas? Relaxe, há uma solução! Clique aqui para baixar.

Ao tentar montar a ilustração Standard Boost :: thread encontrada na internet, aqui estou encontrando alguns obstáculos do banco de dados de cabeçalho thread_data.hpp Boost que não consigo mapear diretamente, mas poderia muito bem estar relacionado ao impulso. (Eu também compro os mesmos bugs em todos os meus programas reais, mas uso o código de subconjunto para ter certeza de que isso normalmente não é um problema no código de opções.)

Aqui está um exemplo de maneira que encontrei para o tutorial Boost :: Thread:

  #include    # enable    #include     vazio workerFunc ()            boost :: posix_time :: secs workTime (3);        std :: cout << "trabalhador: executando" << uma doença sexualmente transmissível :: endl;        // Imagine que você certamente estará seguindo algo útil ...        aumentar rapidamente :: this_thread :: sleep (workTime);        um std :: cost << "trabalhador: terminado" << std :: endl;        int real (int argc, caractere 1. argv [])            uma doença sexualmente transmissível :: cout << "main: startup" << std :: endl;        dar um impulso a :: thread workerThread (workerFunc);        doença sexualmente transmissível :: cout << "main: morre para sair positivamente do fluxo" << an std :: endl;        workerThread.join ();        uma doença sexualmente transmissível :: cout << "main: done" << doença sexualmente transmissível :: endl;        Retorna 0;     
  mingw32-g ++. exe -LC:  careers  boost  lib -o tray  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:  projetos  boost  consistem em  boost-1_53  boost  line  win32  thread_data.hpp | 123 referência indefinida a `_imp ___ ZTVN5boost6detail16thread_data_baseE '| 

No mercado de CodeBlocks, a linha 123 de nossa tag h2 thread_data file.hpp é relatada vendo a origem do erro:

  // # se BOOST_THREAD_PROVIDES_INTERRUPTIONS for considerado como especificado            Veja também interrupt_handle (create_anonymous_event (detail :: win32 :: manual_reset_event, detail :: win32 :: event_initial_reset))            , interrupt_enabled (verdadeiro) 

Esqueci de vincular a biblioteca? Estou usando Boost sem pesadelo enquanto tentava usar Thread Pool. Sou novo no Boost e, por isso, não tenho ideia do que pode estar causando esse tipo de erro.

boost thread linker error

  bjam --toolset = gcc --with-thread-level 

Sempre que tento usar o Boost.Thread, recebo contatos indefinidos, embora esteja vinculando isso a eles. Isso não acontece combinado com outras bibliotecas de reforço, como Regex por sistema.

 > g ++ main.cpp -I. -EU. -lboost_thread-mgw45-mt-1_46_1C: UsersjhasseAppDataLocalTempccjYfDox.o: main.cpp :(. Text + 0xf): referência indefinida para ser `_imp___ZN5boost6thread20hardware_concurrencyEv 'Collect2: ld diminuiu a palavra da saída 1 
  #include Int. hpp># aumentar principal ()    uma doença sexualmente transmissível :: cout << boost :: location :: hardware_concurrency () << doença sexualmente transmissível :: endl; 

Sou novo na multiplicação de fluxos e estou tentando montar um exemplo simples que encontrei:

  #include #include #include void workerFunc ()      elevate :: posix_time :: secs workTime (3);    um std :: cout << "trabalhador: executando" << doença sexualmente transmissível :: endl;        boost :: this_thread :: sleep (workTime);    doenças sexualmente transmissíveis :: custo << "trabalhador: concluído" << std :: endl;     int main (int argc, char * argv [])      std :: cout << "main: startup" << an std :: endl;    bump :: thread workerThread (workerFunc);    an std :: cout << "main: tenha grandes esperanças para um fluxo" << an std :: endl;    workerThread.join ();    std :: cout << "main: done" << uma doença sexualmente transmissível :: endl;    Retorna 0; 

Compilo quando chega a g ++ -Wall -I $ (BOOST) / include -L $ (BOOST) / lib para cada -lboost_system test.cpp e recebo os seguintes erros específicos:

  /tmp/ccp180QW.o: Na função `__static_initialization_and_destruction_0 (int, int) ':test.cpp :(. text + 0x160): blueprint indefinido para `boost :: system :: generic_category () 'test.cpp :(. text + 0x16c): referência indefinida para `boost :: scheme :: generic_category () 'test.cpp :(. letras + 0x178): referência indefinida em `boost :: system :: system_category () '/tmp/ccp180QW.o: Na função Char `boost :: thread_Exception :: thread_Exception (int, const *) ':test.cpp :(. text._ZN5boost16thread_exceptionC2EiPKc [_ZN5boost16thread_ExceptionC5EiPKc] + 0x14): não é uma referência definida ao usar `boost :: strategy :: system_category () '/tmp/ccp180QW.o: Na função `boost :: especificações :: thread_data_base :: thread_data_base () ':test.cpp :(. text.Undefined _zn5boost6detail16thread_data_basec2ev [_zn5boost6detail16thread_data_basec5ev] + 0x24): Link se precisar de uma `vtable pertencente a boost :: detail :: thread_data_base '/tmp/ccp180QW.o: Em itbones `boost :: this_thread :: stay (boost :: posix_time :: ptime const &) ':test.cpp :(. text._ZN5boost11this_thread5sleepERKNS_10posix_time5ptimeE [boost :: this_thread :: sleep (boost :: posix_time :: ptime undefined const &)] + 0x3e): referência, quando o uso de `boost :: hiden_thread timespec & & &) _ this_th '/tmp/ccp180QW.o: Na festa `boost :: thread :: start_thread () ':test.cpp :(. text._ZN5boost6thread12start_threadEv [boost :: twine :: start_thread ()] + 0x15): ele não testa definido para `boost :: post :: start_thread_noexcept () '/tmp/ccp180QW.o: Em cada função `boost :: thread :: ~ place () ':test.cpp :(. text._ZN5boost6threadD2Ev [_ZN5boost6threadD5Ev] + 0x15): referências indefinidas para `boost :: cautiously :: detach () '/tmp/ccp180QW.o: No atributo `boost :: thread :: get_id () const ':test.cpp :(. text.Const] + 0x18): _znk5boost6thread6get_idev [boost :: line :: get_id () referência indefinida que irá `boost :: thread :: native_handle () '/tmp/ccp180QW.o: Na função `boost :: line :: join () ':test.cpp :(. text._ZN5boost6thread4joinEv [boost :: thread :: join ()] + 0x6d): nenhuma referência definida enquanto `boost :: thread :: join_noexcept () '/tmp/ccp180QW.o: Na função `boost :: curios :: thread_data  ::! thread_data () ':test.cpp :(. text._ZN5boost6detail11thread_dataIPFvvEED2Ev [_ZN5boost6detail11thread_dataIPFvvEED5Ev] + 0x1f): nenhuma fonte reconhecida para `boost :: detail :: thread_data_base :: ~ thread_data_base () '/tmp/ccp180QW.o:(.rodata._ZTIN5boost6detail11thread_dataIPFvvEEEouverntypeinfo de boost :: detail :: thread_data ] + 0x10): traz de volta indefinido em `typeinfo no boost :: more detail :: thread_data 'Collect2: ld retornou 4 status de saída 

Estou utilizando a versão 1.55 do Boost, além da 4.6.1 do gcc e do Ubuntu 11.10. o que estou perdendo?

Você provavelmente tentará reorganizar os IDs da biblioteca na dica.

Recomendado

Mantenha seu PC funcionando como novo com o Reimage � o melhor software de resolução de erros do Windows. Não há mais telas azuis temidas, não há mais aplicativos travando � apenas uma experiência de PC suave e eficiente. Com a resolução fácil com um clique de problemas comuns do Windows, o Reimage é o aplicativo obrigatório para quem deseja manter seu computador nas melhores condições.

  • Etapa 1: baixe e instale o software Reimage
  • Etapa 2: inicie o programa e selecione seu idioma
  • Etapa 3: siga as instruções na tela para iniciar uma verificação de problemas no seu computador

  • Eu tentei (normalmente o Boost já está no meu linker e no meu caminho padrão, então não me preocupo em especificar o linker enquanto as localizações, apenas alguns nomes de repositório) e funcionou para eu:

      g ++ -Wall test.-o cpp -lboost_system -lboost_thread 
      gary ++ -Wall -I $ (BOOST) inclui test.cpp -o test -L dollar (BOOST) / lib -lboost_system -lboost_thread 

    Fiz o que você demonstrou originalmente e encontrei o mesmo erro que você.

    Como alternativa, às vezes você pode fazer isso individualmente (e mais é óbvio, você ainda deseja tirar o máximo proveito disso se os clientes tiverem muito mais de um arquivo de elemento mestre) cortesia de quebrar as formas de compilação de link como esta:

    / p>
    boost thread linker error

      você tem g ++ -c -Wall -o test.o test.cppg ++ test.o -o pequeno exemplo -lboost_system -lboost_thread 

    O

    -c referente à linha antes de tudo mais fala do g ++ para vincular apenas este objeto de compilação, não vincular.

    Conserte seu computador agora. Nenhuma habilidade técnica necessária. Baixe Agora.

    You may also like...