Forums » Migration to Enduro/X »
buildserver error
Added by elmehdi about 1 month ago
Hello everyone,
I'm currently in the process of migrating from Oracle Tuxedo to Endurox. During compilation of the iecc_agent server, I'm encountering the following error:
buildserver -o iecc_agent -r Oracle_XA -s @.iecc_agent.cfg -f' -L/opt/platine-master-G06R00C00_POC_ENDUROX/platine/lib -L/opt/platine-master-G06R00C00_POC_ENDUROX/platine/export/lib -L/opt/cft/v3.1.3/Transfer_CFT/home/lib -m64 -lpthread ioa_traitement.o ioa_agent.o ioa_sessions.o ioa_inhibition.o ioa_basculeFlux.o ioa_redirection.o ioa_traitementacq.o .iecc_agent.o -lico_outils -licc_contexte -ldcip_cmd_iecc -ldxx_dialogue -lxxx_commun -lxee_evenement -lice_etat -ldist_request -lKER -lCONV_lib -lproc_main -lxdd_basic -liccc_cmd_intern -licn_nom_lot -lifsa_selection -ldiil_ihm -ldcu_client -ldiil_ihm -ldec_etat_cft -lpdc_use -ldcis_cmd_supe -licr_reconso -lngl_commandes -lngl_liste -lngm_messages -lxcs_csv -L/usr/lib64 -latmisrv -latmi -latmisrvinteg -latmisrvdum -lubf -lnstd -lrt -lm -ldl -lrt'
BUILDSERVER ToolEnduro/X 8.0.10, build Nov 20 2023 15:18:30, using epoll for LINUX (64 bits)
Enduro/X Middleware Platform for Distributed Transaction Processing
Copyright (C) 2009-2016 ATR Baltic Ltd.
Copyright (C) 2017-2023 Mavimax Ltd. All Rights Reserved.This software is released under one of the following licenses:
AGPLv3 (exceptions for Java, Go) or Mavimax license for commercial use./tmp/ccoSJmi9.o:(.data.rel+0x38)�:undefined reference to ��IECC_RCD_TraitementAcquittemen��
collect2: error: ld returned exit status 1
N:NDRX:2:55917863:2374026:7ffff7fe7d40:000:20241029:114054971942:rx_compile_c:pile_c.c:0217:Failed to execute compiler [g++ -O3 -I. -I/opt/platine-master-G06R00C00_POC_ENDUROX/platine/include -I/opt/platine-master-G06R00C00_POC_ENDUROX/platine/export/include -I/opt/cft/v3.1.3/Transfer_CFT/home/inc -Wno-write-strings -D_ALL_SOURCE -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED -D_POSIX_C_SOURCE=199309L -DBOSX -DENVIRONNEMENT_ORANGE -DPROTOCOLE_RADIUS -DFORMAT_XML_ENTREE -DFORMAT_XML_SORTIE -DFORMAT_LV_ENTREE -DFORMAT_TAP3_ENTREE -DFORMAT_CSV_ENTREE -DFORMAT_RADIUS_ENTREE -DFORMAT_ASN1_SORTIE -DPLI -DORACLE9 -DPLI_CFT -DPLI_IECC_CFT -DPLI_MQS -DGESTION_ERRONES -DENVIRONNEMENT_MONOMACHINE -DSYSTEM_Linux -DCTBP_NDEBUG -D__MOD_COLL__ -D__MOD_ARCH__ -D__MOD_RECO__ -D__MOD_TRAI__ -D__MOD_RECY__ -D__MOD_GENE__ -D__MOD_DIST__ -D__MOD_REDI__ -D__MOD_IECC__ -D__MOD_IECC_LOT__ -D__MOD_EXPL__ -D__MOD_SUPE__ -D__MOD_AUDI__ -D__MOD_CEM__ -D__MOD_PARA__ -D__MOD_OTST__ -D__MOD_SECU__ -D__MOD_ACTI__ -D__MOD_CORR__ -D__MOD_QUAL__ -funsigned-char -D__linux -D__ENDUROX -D_G_NO_NRV -g -O2 -m64 -fPIC -I/include -I/opt/mqm/inc -D__MOD_IECC_MQS__ -I/opt/mqm/inc -o iecc_agent ndrx_bs_13JOnl.c -I/usr/include -L/usr/lib64 -L/opt/platine-master-G06R00C00_POC_ENDUROX/platine/lib -L/opt/platine-master-G06R00C00_POC_ENDUROX/platine/export/lib -L/opt/cft/v3.1.3/Transfer_CFT/home/lib -m64 -lpthread ioa_traitement.o ioa_agent.o ioa_sessions.o ioa_inhibition.o ioa_basculeFlux.o ioa_redirection.o ioa_traitementacq.o .iecc_agent.o -lico_outils -licc_contexte -ldcip_cmd_iecc -ldxx_dialogue -lxxx_commun -lxee_evenement -lice_etat -ldist_request -lKER -lCONV_lib -lproc_main -lxdd_basic -liccc_cmd_intern -licn_nom_lot -lifsa_selection -ldiil_ihm -ldcu_client -ldiil_ihm -ldec_etat_cft -lpdc_use -ldcis_cmd_supe -licr_reconso -lngl_commandes -lngl_liste -lngm_messages -lxcs_csv -L/usr/lib64 -latmisrv -latmi -latmisrvinteg -latmisrvdum -lubf -lnstd -lrt -lm -ldl -lrt -L${ORACLE_HOME}/lib -lclntsh -latmisrvinteg -latmi -lubf -lnstd -lrt -ldl -lm -lc -lpthread]: 256
N:NDRX:2:55917863:2374026:7ffff7fe7d40:000:20241029:114054971975:main :server.c:0531:Failed to build
buildserver: 16:Failed to execute compiler [g++ -O3 -I. -I/opt/platine-master-G06R00C00_POC_ENDUROX/platine/include -I/opt/platine-master-G06R00C00_POC_ENDUROX/platine/export/include -I/opt/cft/v3.1.3/Transfer_CFT/home/inc -Wno-write-strings -D_ALL_SOURCE -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED -D_POSIX_C_SOURCE=199309L -DBOSX -DENVIRONNEMENT_ORANGE -DPROTOCOLE_RADIUS -DFORMAT_XML_ENTREE -DFORMAT_XML_SORTIE -DFORMAT_LV_ENTREE -DFORMAT_TAP3_ENTREE -DFORMAT_CSV_ENTREE -DFORMAT_RADIUS_ENTREE -DFORMAT_ASN1_SORTIE -DPLI -DORACLE9 -DPLI_CFT -DPLI_IECC_CFT -DPLI_MQS -DGESTION_ERRONES -DENVIRONNEMENT_MONOMACHINE -DSYSTEM_Linux -DCTBP_NDEBUG -D__MOD_COLL__ -D__MOD_ARCH__ -D__MOD_RECO__ -D__MOD_TRAI__ -D__MOD_RECY__ -D__MOD_GENE__ -D__MOD_DIST__ -D__MOD_REDI__ -D__MOD_IECC__ -D__MOD_IECC_LOT__ -D__MOD_EXPL__ -D__MOD_SUPE__ -D__MOD_AUDI__ -D__MOD_CEM__ -D__MOD_PARA__ -D__MOD_OTST__ -D__MOD_SECU__ -D__MOD_ACTI__ -D__MOD_CORR__ -D__MOD_QUAL__ -funsigned-char -D__linux -D__ENDUROX -D_G_NO_NRV -g -O2 -m64 -fPIC -I/include -I/opt
make3: *** [Makefile:393: iecc_agent] Error 255
The error appears to be a missing reference for IECC_RCD_TraitementAcquittement, but the function actually exist.
Does anyone have insights on resolving this error? Your help would be greatly appreciated!
Replies (8)
RE: buildserver error - Added by Madars about 1 month ago
Hi,
Is "IECC_RCD_TraitementAcquittemen"a XATMI service?
Can you show what's inside .iecc_agent.cfg ?
Thanks
RE: buildserver error - Added by elmehdi about 1 month ago
hello yes it is, here is my .iecc_agent.cfg:
IECC_CMD:IECC_CMD_TraiterCommande
IECC_RCD:IECC_RCD_TraitementAcquittement
and this is my function definition int the .iecc_agent.c:
extern void IECC_RCD_TraitementAcquittement
(
TPSVCINFO * tpsvcinfo
) {
int canevasResultat = 0;
void * p_resultat = NULL;
int longueur = 0;
static void * p_ctxDuree = NULL;
static void * p_ctxVolume = NULL;
static void * p_ctxDonnees = NULL;
static int premierAppel = 1;
#ifdef _ENDUROX
int niveauTransaction =0;
#endif
struct timeb debutAppel;
struct timeb finAppel;XTR_InitFunc( "IECC_RCD_TraitementAcquittement" );
/* Service IECC_RCD */
XTR_Debug( "------------------ Debut du service IECC_RCD" );
.
.
.
.
}
RE: buildserver error - Added by Madars about 1 month ago
extern void IECC_RCD_TraitementAcquittement ( TPSVCINFO * tpsvcinfo ) {
is this c++ code or c?
I see that you are using g++ for buildserver, thus the generate code by the builderver would use c++ mangled symbol names.
If above function is C, then it might not find them.
1) Not sure why you use "extern" for function names? Maybe it actually has
extern "C" void IECC_RCD_TraitementAcquittement ( TPSVCINFO * tpsvcinfo ) {
?
In such case you should remove extern "C" and try to rebuild.
Other option would be just to remove the "extern" keyword for this func.
2) Can you try to set CC to "cc" instead of "g++" and then try to link / run buildserver?
RE: buildserver error - Added by elmehdi about 1 month ago
I tried both of the solutions you mentioned, but neither worked. However, I noticed that buildserver is truncating the last 't' in my function name. In .iecc_agent.cfg, my function is called IECC_RCD_TraitementAcquittement, but during compilation, it searches for IECC_RCD_TraitementAcquittemen. Do you know if there are any constraints on service function name length in Enduro/X?"
RE: buildserver error - Added by Madars about 1 month ago
I see. The service function name is limited to MAXTIDENT + 1 (for 0x00). Which effectively is 30 symbols. "IECC_RCD_TraitementAcquittement" is 31 symbols long, thus buildserver is truncating it to 30.
RE: buildserver error - Added by elmehdi about 1 month ago
Yeah, I tried compiling without the 't', and it worked. So, I’ll need to keep all my function names limited to 30 characters or there is another solution ?!
RE: buildserver error - Added by Madars about 1 month ago
So, I’ll need to keep all my function names limited to 30 characters or there is another solution ?!
This limit applies to XATMI service functions only - function names passed to buildserver tpadvertise() / tpadvertise_full().
Ofcourse, all other C/C++ functions does not have any specific limits.
To keep the long names, you could use tpadvertise_full() during tpsvrinit (instead of -s@ to buildserver - Enduro/X does not enforce the requirement for service function listing during the build time).
extern NDRX_API int tpadvertise_full (const char *svc_nm, void (*p_func)(TPSVCINFO *), const char *fn_nm);
there you can pass function pointer, and use a shorter function name in fn_nm.
However, any logging, service reconfiguration, etc from Enduro/X runtime perspective would use the short function name.
In the end, I guess a more elegant solution would be just to reduce the length of the service function names in your code base.
RE: buildserver error - Added by elmehdi about 1 month ago
I see. Thank you very much for your interaction and help.
(1-8/8)