CentOS e um pequeno exemplo de reforço

0

Eu faço essa pergunta aqui, porque eu acho que tem mais a ver com o Linux do que com o próprio impulso.

Então eu criei um pequeno arquivo cpp:

#include <boost/math/special_functions/round.hpp>
#include <iostream>

int main(int argc, char **argv)
{
    std::cout << "Start rounding ..." << std::endl;

    double b = boost::math::round(1.5);
    std::cout << "Rounding of 1.5: " << b << std::endl;

    return 0;
}

Agora eu comecei a compilá-lo:

g++ main.cpp

Tudo funcionou e eu recebi um arquivo a.out . Quando eu digito o comando ldd a.out , recebo isso:

linux-vdso.so.1 =>  (0x00007ffdfdf38000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f6183d77000)
libm.so.6 => /lib64/libm.so.6 (0x00007f6183a74000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f618385e000)
libc.so.6 => /lib64/libc.so.6 (0x00007f618349d000)
/lib64/ld-linux-x86-64.so.2 (0x00007f61840a7000)

Eu tenho uma pergunta aqui:

Por que não há erro ao compilar? Eu diria que o compilador / linker diz: Hey, there is a function declared (in the boost hpp file), but not defined. assumi que a definição da função round é definida em uma das bibliotecas de boost. E eu assumi que deveria adicionar ao processo de compilação / vinculação algo como -lboost_math_c99l .

    
por kristian 04.09.2015 / 15:14

1 resposta

2

Hmm, falhou para mim (no Mac OS X), então vamos ver onde o CentOS pode estar obtendo esse arquivo ...

# yum whatprovides '*/round.hpp'
...

e em algum lugar dessa saída, deve haver referências a boost-devel de alguns itens arquitetônicos. Então, eu suponho que seu sistema tenha o pacote boost-devel instalado, que inclui o cabeçalho desejado, que o compilador pode encontrar (a menos que o ambiente de compilação seja borked). Sabendo o nome do pacote, você pode pesquisar:

# rpm -ql boost-devel | grep ns/round.hpp
/usr/include/boost/math/special_functions/round.hpp
    
por 04.09.2015 / 16:53