Parallel routine error

Post questions here relative to DataStage Enterprise/PX Edition for such areas as Parallel job design, Parallel datasets, BuildOps, Wrappers, etc.

Moderators: chulett, rschirm, roy

Post Reply
venkatvelpula
Participant
Posts: 80
Joined: Sat Mar 18, 2006 10:27 pm

Parallel routine error

Post by venkatvelpula »

I am getting the following error when i used parallel routine in a transformer.I wrote c++ code and i compiled and produced *.o
file and i used that file in the library path of the parallel routine dialogbox.

I got following fatal error when i ran the job and then it aborted.


Transformer_3: Failed to load the library "V0S3_testPR_Transformer_3.o"; either the directory containing the library file
is not on the library search path, or the library was compiled on a system
that is incompatible with this system: Could not load "V0S3_testPR_Transformer_3": rtld: 0712-001 Symbol PMExists__Fi was referenced
from module /IISPROJECTS/Sales/RT_BP3065.O/V0S3_testPR_Transformer_3.o(), but a runtime definition
of the symbol was not found..

Used Object File option while creating the parallel routine in DataStage. Provide the path of the object file(.o). The external name provided will be the name of my function as its in the code.




Thanks
Venkat
Nagin
Charter Member
Charter Member
Posts: 89
Joined: Thu Jan 26, 2006 12:37 pm

Re: Parallel routine error

Post by Nagin »

Can you post the C++ code as well? It will give us a better idea about the error.
venkatvelpula
Participant
Posts: 80
Joined: Sat Mar 18, 2006 10:27 pm

Post by venkatvelpula »

#include <string>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
//================================
int PMExists(string& elem)
{
size_t startpos = elem.find_first_not_of(" \t\n");
size_t endpos = elem.find_last_not_of(" \t\n");
int ans =0;
if((string::npos != startpos) && ( string::npos != endpos))
{
// elem=elem.substr( startpos, endpos-startpos+1 );
ans=1;
}
// else elem=""; return elem;
return ans;
}
venkatvelpula
Participant
Posts: 80
Joined: Sat Mar 18, 2006 10:27 pm

Post by venkatvelpula »

#include <string>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
//================================
int PMExists(string& elem)
{
size_t startpos = elem.find_first_not_of(" \t\n");
size_t endpos = elem.find_last_not_of(" \t\n");
int ans =0;
if((string::npos != startpos) && ( string::npos != endpos))
{
// elem=elem.substr( startpos, endpos-startpos+1 );
ans=1;
}
// else elem=""; return elem;
return ans;
}
sud
Premium Member
Premium Member
Posts: 366
Joined: Fri Dec 02, 2005 5:00 am
Location: Here I Am

Post by sud »

Include the LD_LIBRARY_PATH to your job and add the directory where you have the object file to that path's value.
It took me fifteen years to discover I had no talent for ETL, but I couldn't give it up because by that time I was too famous.
venkatvelpula
Participant
Posts: 80
Joined: Sat Mar 18, 2006 10:27 pm

Post by venkatvelpula »

Tried after adding the new parameter LD_library_Path but same error.

I don't have access to create or put files in to LD_library_Path. So I tried to put those files under Datastage/PXEngine.

Is that the problem?
venkatvelpula
Participant
Posts: 80
Joined: Sat Mar 18, 2006 10:27 pm

Post by venkatvelpula »

Tried after adding the new parameter LD_library_Path but same error.

I don't have access to create or put files in to LD_library_Path. So I kept those files( cpp code and generated object file) under the Datastage/PXEngine.

Is that the problem?
venkatvelpula
Participant
Posts: 80
Joined: Sat Mar 18, 2006 10:27 pm

Post by venkatvelpula »

Where can I find sample code(built in) for parallel routines?
sud
Premium Member
Premium Member
Posts: 366
Joined: Fri Dec 02, 2005 5:00 am
Location: Here I Am

Post by sud »

In whichever directory you have put the object file, add that path to the value of LD_LIBRARY_PATH while running the job.
It took me fifteen years to discover I had no talent for ETL, but I couldn't give it up because by that time I was too famous.
venkatvelpula
Participant
Posts: 80
Joined: Sat Mar 18, 2006 10:27 pm

Post by venkatvelpula »

I tried that already and still not working.
venkatvelpula
Participant
Posts: 80
Joined: Sat Mar 18, 2006 10:27 pm

Post by venkatvelpula »

I do have $LIB_PATH only. So I changed the path to this environmental variable defalut value.

I can't find $LD_LIBRARY_PATH variable. Looks like it doesn't exist here.
sud
Premium Member
Premium Member
Posts: 366
Joined: Fri Dec 02, 2005 5:00 am
Location: Here I Am

Post by sud »

Hmmm, I can't quite comment on WHY it doesn't exist. Hopefully some of the experts will take notice of this post and write about possible reasons. But, can you just create a user defined environment variable for your project and use it in your job - just have the LD_LIBRARY_PATH equal to the URL of the folder where you have deployed the object file.
It took me fifteen years to discover I had no talent for ETL, but I couldn't give it up because by that time I was too famous.
venkatvelpula
Participant
Posts: 80
Joined: Sat Mar 18, 2006 10:27 pm

Post by venkatvelpula »

Even if I use user defined variable, I am giving the total path with object file name for linking object code to datastage. Where do you want me to use the user defined varaible?
venkatvelpula
Participant
Posts: 80
Joined: Sat Mar 18, 2006 10:27 pm

Post by venkatvelpula »

Additional Info:

When I try to execute c++ code..It's giving the following error

0509-036 Cannot load program because of the following error

0509-108 The .loader section does not exist.

Is that the problem?

can we execute the c++ code on AIX5?
vinothkumar
Participant
Posts: 342
Joined: Tue Nov 04, 2008 10:38 am
Location: Chennai, India

Post by vinothkumar »

I am also getting same error. Let me know if there are any updates in this
Post Reply