Как создать 64-битную версию статических библиотек Oracle OCI (libocia / w / ma) для MIGW с использованием блоков кода?

0

Кто-нибудь знает, как создать 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" = "..."

Теги:
gcc
mingw-w64
oci

1 ответ

0
Лучший ответ

Похоже, что платформа 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

...

~

  • 0
    Большой! Это сработало.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню