Я делаю некоторый C-код в системе Solaris SPARC и почесываю голову из-за "несоответствия", обнаруженного в моем интеграционном тестировании.
Я провожу некоторые тесты в системе SAP и используюSAP RFCSDK, но SAP здесь вообще не мой вопрос ..... Мне интересно, если я пропускаю некоторые опции компиляции и т. д.
Позвольте мне попытаться объяснить:
Код клиента ->Общая библиотека (настраиваемая) -> Общая библиотека (SAP) -> SAP === работает на 100%
Код клиента -> Общая библиотека (настраиваемая PROXY) -> Общая библиотека (настраиваемая)-> Shared Lib (SAP) -> SAP == Дескриптор INVALID
Таким образом, не вдаваясь в подробности, вы когда-нибудь слышали о том, что какой-либо «дескриптор» становится недействительным только потому, что другой общий lib был"inbetween" клиент и "целевая совместно используемая библиотека"?
Совместно используемая библиотека PROXY, которая вызывает проблему с INVALID HANDLE, не делает ничего особенного, просто "пропускает"
#include <stdio.h>
#include <stdlib.h>
#include "saprfc_receiver_proxy.h"
#include "saprfc_receiver.h"
int saprfc_receiver_proxy_initialize(char *sap_hostname, char *sap_client,
int sap_sysnbr, char *sap_language, char *sap_user, char *sap_password,
int sap_rfctrace){
return saprfc_receiver_initialize(sap_hostname, sap_client, sap_sysnbr,
sap_language, sap_user, sap_password, sap_rfctrace);
}
int saprfc_receiver_proxy_beginTransaction(char *tid){
return saprfc_receiver_beginTransaction(tid);
}
int saprfc_receiver_proxy_commitTransaction(char *tid){
return saprfc_receiver_commitTransaction(tid);
}
int saprfc_receiver_proxy_rollbackTransaction(char *tid){
return saprfc_receiver_rollbackTransaction(tid);
}
int saprfc_receiver_proxy_writeMessage(char *tid, char *buffer){
return saprfc_receiver_writeMessage(tid, buffer);
}
int saprfc_receiver_proxy_openConnection(){
return saprfc_receiver_openConnection();
}
int saprfc_receiver_proxy_closeConnection(){
return saprfc_receiver_closeConnection();
}
Компиляция очень проста, вот общая библиотека lib, котораявызывает прямые разделяемые библиотеки SAP напрямую:
/usr/sfw/bin/gcc -m64 -R/usr/sfw/lib/64 -c -fPIC -I../include \
-I../rfcsdk/include saprfc_receiver.c -o saprfc_receiver.o
/usr/sfw/bin/gcc -m64 -R/usr/sfw/lib/64 -shared -L../rfcsdk/lib/ \
-o libsaprfc_receiver.so saprfc_receiver.o -lrfccm -lrfc
А вот прокси совместно используемой библиотеки lib:
/usr/sfw/bin/gcc -m64 -R/usr/sfw/lib/64 -c -fPIC -I../include \
saprfc_receiver_proxy.c -o saprfc_receiver_proxy.o
/usr/sfw/bin/gcc -m64 -R/usr/sfw/lib/64 -shared -L../lib \
-o libsaprfc_receiver_proxy.so saprfc_receiver_proxy.o -lsaprfc_receiver
Так есть ли какое-то "золотое правило" при использовании C, чтобы убедиться, что "разделяемые библиотеки между ними "вообще не влияют на состояние?
Извините, если мои объяснения плохие, я постараюсь редактировать этот пост позже с более подробной информацией ....
Суть в том, чточто если клиент напрямую вызывает разделяемую библиотеку (custom), то она работает, в тот момент, когда я добавляю ПРОСТОЙ прокси между дескриптором SAP, происходит плохо.