Кто-нибудь знает, как создать 64-битные версии статических библиотек Oracle OCI?
Я загрузил ocilib-3.12.1-windows.zip(2.9 MB) из http://sourceforge.net/projects/orclib/files/
Получил этот проект ocilib_static_lib_mingw.cbp в папке /proj. Он компилируется под Migw GCC 32 бит. Но он не компилируется под 64-разрядным Migw GCC 64 бит.
-------------- Build: Release - ANSI in ocilib_static_lib_mingw (compiler: Mingw/TDM 64)---------------
x86_64-w64-mingw32-gcc.exe -O2 -Wall -DOCI_CHARSET_ANSI -DOCI_IMPORT_RUNTIME -DOCI_API=__stdcall -IC:\ocilib\include -c C:\ocilib\src\agent.c -o obj\Release\src\agent.o
In file included from C:\ocilib\src\oci_defs.h:58:0,
from C:\ocilib\src\oci_api.h:58,
from C:\ocilib\src\oci_import.h:63,
from C:\ocilib\src\ocilib_defs.h:39,
from C:\ocilib\src\ocilib_types.h:38,
from C:\ocilib\src\ocilib_internal.h:38,
from C:\ocilib\src\agent.c:35:
C:\ocilib\src\oci_types.h:253:25: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'ubig_ora'
typedef unsigned _int64 ubig_ora;
^
C:\ocilib\src\oci_types.h:254:25: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'sbig_ora'
typedef signed _int64 sbig_ora;
C:\ocilib\SRC\oci_types.h
#ifdef _WIN64
#ifndef lint
253: typedef unsigned _int64 ubig_ora;
254: typedef signed _int64 sbig_ora;
#else
#define ubig_ora unsigned _int64
#define sbig_ora signed _int64
#endif
Я понятия не имею о ошибке "expected" = "..."
Похоже, что платформа Windows была обнаружена, и поэтому предполагается, что используется компилятор MSVC. Старые версии MSVC не поддерживали typedef, такие как int64_t (но у них были собственные версии INT64 или _int64). Поскольку ваш проект является чистым C (нет C++)
Сделайте что-то вроде этого:
#ifdef _WIN64
# if defined(_MSC_VER)
# ifndef lint
typedef unsigned _int64 ubig_ora;
typedef signed _int64 sbig_ora;
# else
# define ubig_ora unsigned _int64
# define sbig_ora signed _int64
# endif
# elif defined(__MINGW64__)
# include <stdint.h>
typedef uint64_t ubig_ora;
typedef int64_t sbig_ora;
# endif
...
~