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 <iostream>
#include <libfprint/fprint.h>

int main(int argc, char* argv[])
{
   int retorno = fp_init();

   std::cout << retorno << std::endl;

   fp_exit();
   return 0;
}

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 <iostream>
extern "C"
{
   #include <libfprint/fprint.h>
}

int main(int argc, char* argv[])
{
   int retorno = fp_init();

   std::cout << retorno << std::endl;

   fp_exit();
   return 0;
}

E pronto. Tudo resolveu-se!

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

Abraço a todos!

Deixe uma resposta