Out-of-series #7 – O que fazer quando uma biblioteca em C não funciona em C++?

Padrão

Olá a todos!

Esses dias me aconteceu uma coisa um tanto quanto inusitada. Eu tinha lá uma biblioteca em C, que funcionava legalzinha. Fiz alguns testes com ela, fiz alguns programas de teste e tudo ok. Mas quando fui integrá-la com o aplicativo principal em C++… sempre dava erro de referência! Apesar de ter configurado o linker, ele não encontrava as funções da biblioteca…

A biblioteca em questão foi a fprint. A princípio, meu código estava assim:

#include &lt;iostream&gt;<br />
#include &lt;libfprint/fprint.h&gt;</p>
<p>int main(int argc, char* argv[])<br />
{<br />
   int retorno = fp_init();</p>
<p>   std::cout &lt;&lt; retorno &lt;&lt; std::endl;</p>
<p>   fp_exit();<br />
   return 0;<br />
}<br />

O comando pra compilar foi o seguinte:

g++ -lfprint -o executavel main.cpp

Mas quem disse que funcionava? O compilador me retornava a mensagem “undefined reference to ‘fp_init()’” e “undefined reference to ‘fp_exit()’“. Depois de revirar a Internet, descobri que ao utilizar uma biblioteca feita em C, em uma aplicação C++, você precisa explicitar isso. Dessa forma, meu código ficou assim:

#include &lt;iostream&gt;<br />
extern &quot;C&quot;<br />
{<br />
   #include &lt;libfprint/fprint.h&gt;<br />
}</p>
<p>int main(int argc, char* argv[])<br />
{<br />
   int retorno = fp_init();</p>
<p>   std::cout &lt;&lt; retorno &lt;&lt; std::endl;</p>
<p>   fp_exit();<br />
   return 0;<br />
}<br />

E pronto. Tudo resolveu-se!

Espero ter ajudado, e em breve retorno com mais posts (estou provisoriamente sem computador… :().

Abraço a todos!