как использовать Oracle Precompiler на Mac

Я застрял здесь несколько дней , все, кто может помочь, благодарны. Главный вопрос - об использовании прекомпилятора Oracle на Mac.

Я пробовал шаг за шагом вот так: 1. В качестве официальных документов Oracle я загружаю три файла:

1.instantclient-basic-macos.x64-18.1.0.0.0.zip
2.instantclient-sdk-macos.x64-18.1.0.0.0-2.zip
3.instantclient-sqlplus-macos.x64-18.1.0.0.0.zip

2. затем выполните шаги, указанные здесь https://github.com/InstantClientTap/homebrew-instantclient:

brew tap InstantClientTap/instantclient
brew install instantclient-basic
brew install instantclient-sdk
brew install instantclient-sqlplus 

Я использовал sqlplus для подключения к моему серверу Oracle, который успешно работает в докере.

3. НО, из-за этого инструмента не предусмотрена установка прекомпилятора. Итак, я загружаю Instantclient-precomp-macos.x64-12.2.0.1.0-2.zip, затем распаковываю его.

4. У меня есть папка precomp с именем папки admin, а в admin у меня есть два файла pcbcfg.cfg и pcscfg.cfg, я помещаю папку precomp в / usr / local / lib /, о чем упоминалось, когда я использую proc Commond в моем Терминале вот так:

System default option values taken from:/usr/local/lib/precomp/admin/pcscfg.cfg.

5. также у меня есть папка с именем sdk, bcuz Я установил sdk с помощью homebrew, поэтому я копирую файлы exec с именами proc и procob в sdk в /usr/local/Cellar/instantclient-sdk/18.1.0.0.0-2/lib/sdk/

6. а затем помещаю все файлы .h из папки include в /usr/local/Cellar/instantclient-sdk/18.1.0.0.0-2/lib/sdk/include на всякий случай, я также копирую их в usr/local/include.

7. И я изменил строки в pcscfg.cfg вот так: sys_include=($ORACLE_HOME/sdk/include,/usr/include,/usr/local/include/,/usr/local/Cellar/instantclient-sdk/18.1.0.0.0-2/include,/usr/local/Cellar/instantclient-sdk/18.1.0.0.0-2/lib/sdk/include,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include)

это все, что я сделал.

Поэтому я просто пишу test.pc:

#include<arpa/inet.h>
#include<string.h>
#include<stdio.h>

EXEC SQL INCLUDE SQLCA; 
EXEC SQL BEGIN DECLARE SECTION;

varchar username[20],passwd[20],dbn[20];

EXEC SQL END DECLARE SECTION;

strcpy(username.arr, "c##yuyu");
username.len = strlen("c##yuyu");
strcpy(passwd.arr,"123456");
passwd.len = strlen("123456");
strcpy(dbn.arr, "ORCLCDB.localdomain");
dbn.len = strlen("ORCLCDB.localdomain");

EXEC SQL CONNECT: username IDENTIFIED BY :passwd USING :dbn;

if(sqlca.sqlcode !=0){
    printf("login failed\n");
}
printf("login success\n");

затем commond proc test.pc, к сожалению появилось много ошибок:

Pro*C/C++: Release 18.0.0.0.0 - Production on Mon Aug 12 17:58:05 2019
Version 18.1.0.0.0

Copyright (c) 1982, 2018, Oracle and/or its affiliates.  All rights reserved.

System default option values taken from: /usr/local/lib/precomp/admin/pcscfg.cfg

Syntax error at line 95, column 1, file /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/libkern/_OSByteOrder.h:
Error at line 95, column 1 in file /Applications/Xcode.app/Contents/Developer/Pl
atforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/libkern/_OSByteOrd
er.h
uint16_t
1
PCC-S-02201, Encountered the symbol "uint16_t" when expecting one of the followi
ng:

   ; , = ( [
The symbol ";" was substituted for "uint16_t" to continue.

Syntax error at line 104, column 1, file /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/libkern/_OSByteOrder.h:
Error at line 104, column 1 in file /Applications/Xcode.app/Contents/Developer/P
latforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/libkern/_OSByteOr
der.h
uint32_t
1
PCC-S-02201, Encountered the symbol "uint32_t" when expecting one of the followi
ng:

   ; , = ( [
The symbol ";" was substituted for "uint32_t" to continue.

Syntax error at line 113, column 1, file /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/libkern/_OSByteOrder.h:
Error at line 113, column 1 in file /Applications/Xcode.app/Contents/Developer/P
latforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/libkern/_OSByteOr
der.h
uint64_t
1
PCC-S-02201, Encountered the symbol "uint64_t" when expecting one of the followi
ng:

   ; , = ( [
The symbol ";" was substituted for "uint64_t" to continue.

Syntax error at line 52030, column 62, file /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/AvailabilityInternal.h:
Error at line 52030, column 62 in file /Applications/Xcode.app/Contents/Develope
r/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/AvailabilityIn
ternal.h
    #define __API_AVAILABLE_GET_MACRO(_1,_2,_3,_4,_5,_6,NAME,...) NAME
.............................................................1
PCC-S-02014, Encountered the symbol "..." when expecting one of the following:

   an identifier, define, elif, else, endif, error, if, ifdef,
   ifndef, include, include_next, line, pragma, undef, exec,
   sql, begin, end, var, type, oracle,
   an immediate preprocessor command, a C token, create,
   function, package, procedure, trigger, or, replace,

Syntax error at line 97, column 9, file /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/types.h:
Error at line 97, column 9 in file /Applications/Xcode.app/Contents/Developer/Pl
atforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/types.h
typedef quad_t *                qaddr_t;
........1
PCC-S-02201, Encountered the symbol "quad_t" when expecting one of the following
:

   auto, char, const, double, enum, float, int, long,
   ulong_varchar, OCIBFileLocator OCIBlobLocator,
   OCIClobLocator, OCIDateTime, OCIExtProcContext, OCIInterval,
   OCIRowid, OCIDate, OCINumber, OCIRaw, OCIString, register,
   short, signed, sql_context, sql_cursor, static, struct,
   union, unsigned, utext, uvarchar, varchar, void, volatile,
   a typedef name,
The symbol "enum," was substituted for "quad_t" to continue.

Syntax error at line 33, column 2, file /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_iovec_t.h:
Error at line 33, column 2 in file /Applications/Xcode.app/Contents/Developer/Pl
atforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_iovec_
t.h
        size_t   iov_len;       /* [XSI] Size of region iov_base points to */
.1
PCC-S-02201, Encountered the symbol "size_t" when expecting one of the following
:

   } char, const, double, enum, float, int, long, ulong_varchar,
   OCIBFileLocator OCIBlobLocator, OCIClobLocator, OCIDateTime,
   OCIExtProcContext, OCIInterval, OCIRowid, OCIDate, OCINumber,
   OCIRaw, OCIString, short, signed, sql_context, sql_cursor,
   struct, union, unsigned, utext, uvarchar, varchar, void,
   volatile, a typedef name,
The symbol "enum," was substituted for "size_t" to continue.

Syntax error at line 303, column 2, file /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/socket.h:
Error at line 303, column 2 in file /Applications/Xcode.app/Contents/Developer/P
latforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/socket.h
        socklen_t               sae_srcaddrlen; /* size of source address */
.1
PCC-S-02201, Encountered the symbol "socklen_t" when expecting one of the follow
ing:

   } char, const, double, enum, float, int, long, ulong_varchar,
   OCIBFileLocator OCIBlobLocator, OCIClobLocator, OCIDateTime,
   OCIExtProcContext, OCIInterval, OCIRowid, OCIDate, OCINumber,
   OCIRaw, OCIString, short, signed, sql_context, sql_cursor,
   struct, union, unsigned, utext, uvarchar, varchar, void,
   volatile, a typedef name,
The symbol "enum," was substituted for "socklen_t" to continue.

Syntax error at line 305, column 2, file /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/socket.h:
Error at line 305, column 2 in file /Applications/Xcode.app/Contents/Developer/P
latforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/socket.h
        socklen_t               sae_dstaddrlen; /* size of destination address *
/
.1
PCC-S-02201, Encountered the symbol "socklen_t" when expecting one of the follow
ing:

   } char, const, double, enum, float, int, long, ulong_varchar,
   OCIBFileLocator OCIBlobLocator, OCIClobLocator, OCIDateTime,
   OCIExtProcContext, OCIInterval, OCIRowid, OCIDate, OCINumber,
   OCIRaw, OCIString, short, signed, sql_context, sql_cursor,
   struct, union, unsigned, utext, uvarchar, varchar, void,
   volatile, a typedef name,
The symbol "enum," was substituted for "socklen_t" to continue.

Syntax error at line 406, column 2, file /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/socket.h:
Error at line 406, column 2 in file /Applications/Xcode.app/Contents/Developer/P
latforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/socket.h
        sa_family_t     sa_family;      /* [XSI] address family */
.1
PCC-S-02201, Encountered the symbol "sa_family_t" when expecting one of the foll
owing:

   } char, const, double, enum, float, int, long, ulong_varchar,
   OCIBFileLocator OCIBlobLocator, OCIClobLocator, OCIDateTime,
   OCIExtProcContext, OCIInterval, OCIRowid, OCIDate, OCINumber,
   OCIRaw, OCIString, short, signed, sql_context, sql_cursor,
   struct, union, unsigned, utext, uvarchar, varchar, void,
   volatile, a typedef name,
The symbol "enum," was substituted for "sa_family_t" to continue.

Syntax error at line 439, column 2, file /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/socket.h:
Error at line 439, column 2 in file /Applications/Xcode.app/Contents/Developer/P
latforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/socket.h
        sa_family_t     ss_family;      /* [XSI] address family */
.1
PCC-S-02201, Encountered the symbol "sa_family_t" when expecting one of the foll
owing:

   } char, const, double, enum, float, int, long, ulong_varchar,
   OCIBFileLocator OCIBlobLocator, OCIClobLocator, OCIDateTime,
   OCIExtProcContext, OCIInterval, OCIRowid, OCIDate, OCINumber,
   OCIRaw, OCIString, short, signed, sql_context, sql_cursor,
   struct, union, unsigned, utext, uvarchar, varchar, void,
   volatile, a typedef name,
The symbol "enum," was substituted for "sa_family_t" to continue.

Syntax error at line 543, column 2, file /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/socket.h:
Error at line 543, column 2 in file /Applications/Xcode.app/Contents/Developer/P
latforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/socket.h
        socklen_t       msg_namelen;    /* [XSI] size of address */
.1
PCC-S-02201, Encountered the symbol "socklen_t" when expecting one of the follow
ing:

   } char, const, double, enum, float, int, long, ulong_varchar,
   OCIBFileLocator OCIBlobLocator, OCIClobLocator, OCIDateTime,
   OCIExtProcContext, OCIInterval, OCIRowid, OCIDate, OCINumber,
   OCIRaw, OCIString, short, signed, sql_context, sql_cursor,
   struct, union, unsigned, utext, uvarchar, varchar, void,
   volatile, a typedef name,
The symbol "enum," was substituted for "socklen_t" to continue.

Syntax error at line 547, column 2, file /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/socket.h:
Error at line 547, column 2 in file /Applications/Xcode.app/Contents/Developer/P
latforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/socket.h
        socklen_t       msg_controllen; /* [XSI] ancillary data buffer len */
.1
PCC-S-02201, Encountered the symbol "socklen_t" when expecting one of the follow
ing:

   } char, const, double, enum, float, int, long, ulong_varchar,
   OCIBFileLocator OCIBlobLocator, OCIClobLocator, OCIDateTime,
   OCIExtProcContext, OCIInterval, OCIRowid, OCIDate, OCINumber,
   OCIRaw, OCIString, short, signed, sql_context, sql_cursor,
   struct, union, unsigned, utext, uvarchar, varchar, void,
   volatile, a typedef name,
The symbol "enum," was substituted for "socklen_t" to continue.

Syntax error at line 583, column 2, file /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/socket.h:
Error at line 583, column 2 in file /Applications/Xcode.app/Contents/Developer/P
latforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/socket.h
        socklen_t       cmsg_len;       /* [XSI] data byte count, including hdr
*/
.1
PCC-S-02201, Encountered the symbol "socklen_t" when expecting one of the follow
ing:

   char, const, double, enum, float, int, long, ulong_varchar,
   OCIBFileLocator OCIBlobLocator, OCIClobLocator, OCIDateTime,
   OCIExtProcContext, OCIInterval, OCIRowid, OCIDate, OCINumber,
   OCIRaw, OCIString, short, signed, sql_context, sql_cursor,
   struct, union, unsigned, utext, uvarchar, varchar, void,
   volatile, a typedef name,
The symbol "enum," was substituted for "socklen_t" to continue.

Syntax error at line 606, column 2, file /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/socket.h:
Error at line 606, column 2 in file /Applications/Xcode.app/Contents/Developer/P
latforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/socket.h
        pid_t   cmcred_pid;             /* PID of sending process */
.1
PCC-S-02201, Encountered the symbol "pid_t" when expecting one of the following:

   char, const, double, enum, float, int, long, ulong_varchar,
   OCIBFileLocator OCIBlobLocator, OCIClobLocator, OCIDateTime,
   OCIExtProcContext, OCIInterval, OCIRowid, OCIDate, OCINumber,
   OCIRaw, OCIString, short, signed, sql_context, sql_cursor,
   struct, union, unsigned, utext, uvarchar, varchar, void,
   volatile, a typedef name,

Syntax error at line 0, column 0, file lg.pc:
Error at line 0, column 0 in file lg.pc
PCC-S-02201, Encountered the symbol "<eof>" when expecting one of the following:

   ; : an identifier, end-exec, random_terminal

Error at line 0, column 0 in file lg.pc
PCC-F-02102, Fatal error while doing C preprocessing

ОС - это версия Mojave и Oracle Client, как указано выше, я предполагаю, что ошибки связаны с библиотекой ссылок или чем-то еще в файлах заголовков, но у меня нет идеи решить эту проблему после того, что я сделал. Все, кто может помочь, очень благодарны.

ps. Наконец-то я отказываюсь от решения этой рациональной проблемы. Просто для намерения я почти решаю его за 3 шага 1: найти хорошую среду (докер - хороший вариант или другой компьютер), в которой можно без проблем предварительно скомпилировать файл pro * c. 2: скопируйте все файлы по пути из pcscfg.cfg и кучу файлов .h на свой компьютер. 3. С легкостью измените локальную pcscfg.cfg файловую точку на путь к скопированным файлам .h, и теперь вы можете без проблем запускать proc Commond.


person Alex Yu    schedule 12.08.2019    source источник
comment
Исправляйте ошибки по очереди. Для начала добавьте #include <stdint.h>   -  person Lorinczy Zsigmond    schedule 01.09.2019


Ответы (1)


Аналогичная проблема с Mac. В Linux (Oracle Linux 7.6 с gcc 4.8.5) все в порядке. В качестве обходного пути я прокомментирую предварительную компиляцию с помощью 'oracle proc' и раскомментирую stdio.h в предварительно скомпилированном файле. После этого скомпилируйте его.

person sdmrnv    schedule 13.08.2019
comment
Наконец, я отказываюсь от рационального решения этой проблемы. Просто для намерения я почти решаю его за 3 шага 1: найти хорошую среду (докер - хороший вариант или другой компьютер), в которой можно без проблем предварительно скомпилировать файл pro * c. 2. Скопируйте все файлы по пути из pcscfg.cfg и кучу файлов .h на свой компьютер. 3. С легкостью измените вашу локальную pcscfg.cfg файловую точку на путь к скопированным вами файлам .h, и теперь вы можете плавно запустить proc commond. - person Alex Yu; 15.08.2019
comment
Кажется, что Pro C не работает с Apple llvm + clang должным образом ... Итак, я установил gcc (Homebrew GCC 9.1.0) из homebrew на свой Mac и скомпилировал с ним C-файлы, которые я получил после Oracle Прекомпилятор Pro C выполнил свою работу на моей виртуальной машине Linux (OraLinux 7.6). Это неудобно, но для меня это рабочий путь, если я хочу иметь исполняемую программу на Mac. - person sdmrnv; 15.08.2019
comment
это также хороший способ решить эту странную проблему, я согласен с тем, что Apple LLVM + clang должен взять на себя ответственность за некоторые небольшие, но фатальные различия в системных файлах .h - person Alex Yu; 15.08.2019