Como compilar o mysql56-client para USE_OLD_FUNCTIONS no FreeBSD 10?

1

EDIT: Eu resolvi meu problema - Eu estava editando o arquivo de inclusão errado. Veja o final deste post para a correção.

Estou migrando alguns aplicativos de um servidor antigo do FreeBSD 4.3 para um novo servidor do FreeBSD 10. Estes são aplicativos C que usam a API C do MySQL. Eles são muito antigos e usam a função mysql_connect (que é obsoleta em versões mais recentes do MySQL). Pelo que eu posso encontrar olhando para a fonte do MySQL, a API do cliente MySQL precisa ser compilada com USE_OLD_FUNCTIONS . Infelizmente não consigo descobrir como fazer isso. Estou tentando instalar o MySQL 5.6 com o sistema de portas do FreeBSD. Eu fiz o seguinte, que acho que deveria funcionar:

cd /usr/ports/databases/mysql56-client
make fetch
make extract
make configure

Eu editei work/mysql-5.6.16/include/config.h e adicionei a seguinte linha no final:

#define USE_OLD_FUNCTIONS

Depois eu compilei e instalei o cliente:

make
make install

mysql_config mostra o seguinte:

# mysql_config --libs
-L/usr/local/lib/mysql -lmysqlclient  -pthread -lm
# mysql_config --cflags
-I/usr/local/include/mysql -pipe -fno-strict-aliasing -g -DNDEBUG

Quando tento compilar um cliente de teste muito simples, mostrado abaixo, recebo um erro de vinculador que diz undefined reference to 'mysql_connect' . O código do cliente de teste é o seguinte:

#define USE_OLD_FUNCTIONS
#include <mysql.h>
#include <stdio.h>
#include <stdlib.h>
main()
{
  MYSQL *sock;
  sock = mysql_connect(NULL, NULL, "root", "test");
  mysql_close(sock);
}

Quando eu tento compilá-lo, recebo um erro de vinculador:

# clang -o test -I/usr/local/include/mysql -pipe -fno-strict-aliasing -g -DNDEBUG test.c -L/usr/local/lib/mysql -lmysqlclient -pthread -lm
/tmp//ccTJC9Ov.o: In function 'main':
/root/admin/test.c:8: undefined reference to 'mysql_connect'
collect2: ld returned 1 exit status

O programa de teste a seguir, que usa a função mysql_real_connect mais recente, compila muito bem com os mesmos argumentos do compilador e é executado sem erros:

#include <mysql.h>
#include <stdio.h>
#include <stdlib.h>
main()
{
  MYSQL *sock;
  sock = mysql_init(NULL);
  mysql_real_connect(sock, NULL, "root", "test", NULL, 0, NULL, 0);
  mysql_close(sock);
}

Alguma ideia de onde estou indo errado? A documentação do MySQL para USE_OLD_FUNCTIONS parece ser inexistente. Eu não posso culpá-los, uma vez que estas funções foram preteridas por um tempo longo , mas o código ainda parece estar lá.

Solução:

Eu acho que descobri. Em vez de editar work/mysql-5.6.16/include/config.h , eu deveria ter editado work/mysql-5.6.16/include/my_config.h . Eu adicionei o seguinte ao último arquivo, recompilei o MySQL, e meu programa de teste compila e liga muito bem agora.

#define USE_OLD_FUNCTIONS

Observe que adicionei isso a my_config.h antes do último #endif no arquivo. Espero que isso ajude alguém no futuro.

    
por hcsteve 14.02.2014 / 15:06

1 resposta

0

Eu acho que descobri. Em vez de editar work/mysql-5.6.16/include/config.h , eu deveria ter editado work/mysql-5.6.16/include/my_config.h . Eu adicionei o seguinte ao último arquivo, recompilei o MySQL, e meu programa de teste compila e liga muito bem agora.

#define USE_OLD_FUNCTIONS

Observe que adicionei isso a my_config.h antes do último #endif no arquivo. Espero que isso ajude alguém no futuro.

    
por 14.02.2014 / 18:33

Tags