quinta-feira, fevereiro 01, 2007

Compilação da Biblioteca Berkeley Db 4.5 no MinGW32.

É foi uma briga. Infelizmente não dá para utilizar apenas o pacote que a Oracle fornece porque na distribuição deles só vem a biblioteca C e se você quiser utilizar C++ vocês mesmo vai ter que compilá-la.

Bom, como eu já tinha a instalação do MinGW32, eu acabei tendo que instalar - apesar de não querer - o Msys para poder ter as ferramentas de desenvolvimento automake e autoconf.

Bom, agora vai uma dica, se você apenas seguir as intruções da documentação você não vai conseguir compilar a biblioteca porque no caso específico do MinGW32, é preciso ter mais uma biblioteca para compilação: wsock32.

Então para o processo de build funcionar, você deve fazer o seguinte:
$> cd db-4.5.20/build_unix
$> ../dist/configure --enable-cxx --enable-mingw LIBCSO_LIBS=-lwsock32 LIBXSO_LIBS=-lwsock32

Se você não adicionar essas duas variáveis no momento do configure, você pode acabar com o seguinte erro:
Creating library file: .libs/libdb-4.5.dll.a
.libs/os_errno.o(.text+0x3b): In function `_os_get_neterr':
c:/LibDB/build_unix/../dist/../os_windows/os_errno.c:57: undefined reference to `WSAGetLastError@0'
.libs/os_errno.o(.text+0x57):c:/LibDB/build_unix/../dist/../os_windows/os_errno.c:59: undefined reference to `WSASetLastError@4'
collect2: ld returned 1 exit status
make: *** [libdb-4.5.la] Error 1

Mais uma coisa que eu estava esquecendo. No Windows, ele acaba sobrescrevendo a biblioteca estática quando vai criar a biblioteca compartilhada. Se você quiser usar a biblioteca C++ estática, precisa impedir a criação da compartilhada, com o parâmetro --enable-shared=no do configure.

Boa sorte.