DS routine orchestrate.h

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
Childrensmn
Premium Member
Premium Member
Posts: 32
Joined: Mon Apr 12, 2010 3:42 pm
Location: Minneapolis
Contact:

DS routine orchestrate.h

Post by Childrensmn »

Trying to figure out how to get this function to return a integer. Im no c++ programmer and Im not sure how to get this to work... Any help would be appreciated.

The only thing I need is to pass in a string (from DS) and Apt_hash to return the integer back to ds.

Code: Select all

#include <apt_framework/orchestrate.h>

int* ObjTestOne(char Arg1 )
{
int*  OutInt;
OutInt = APT_hash(char Arg1 );

return OutInt;
}
UCDI
Premium Member
Premium Member
Posts: 383
Joined: Mon Mar 21, 2016 2:00 pm

Post by UCDI »

Code: Select all

int ObjTestOne(char Arg1 ) 
{ 
int*  OutInt; 
OutInt = APT_hash(char Arg1 ); 
int returnme = OutInt[0];

return returnme;
}
I haven't had time to study ds parallism in detail so I have been erring on the side of caution and setting up a tiny memory manager in my functions. I think the above is safe but validate it carefully to ensure that there are no thread-safety type issues. Can anyone elaborate on if datastage does any sort of protectionism and thread safety wrappers to these function calls?
Last edited by UCDI on Thu Dec 08, 2016 12:30 pm, edited 1 time in total.
Childrensmn
Premium Member
Premium Member
Posts: 32
Joined: Mon Apr 12, 2010 3:42 pm
Location: Minneapolis
Contact:

Re: DS routine orchestrate.h

Post by Childrensmn »

I did get the code to compile however when I run this routine in a job I get the following error.
"Transformer_0: Error when checking composite operator: Failed to load the library "V0S0_cpp_test_routine_2_Transformer_0.so"; 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
"V0S0_cpp_test_routine_2_Transformer_0": /projects/DwTest/RT_BP930.O/V0S0_cpp_test_routine_2_Transformer_0.so: undefined symbol: _Z10ObjTestOnea. "

I should add the compile line and lib path

g++ -c rr_temp.cpp -O -fPIC -Wno-deprecated -m64 -mtune=generic -mcmodel=small -shared -m64 -I /app/IBM/InformationServer/Server/PXEngine/include
vmpdwis1</app/IBM/InformationServer/Server/PXEngine/lib>


LD_LIBRARY_PATH=`dirname $DSHOME`/biginsights/IHC/c++/Linux-amd64-64/lib:`dirname $DSHOME`/bran
ded_odbc/lib:`dirname $DSHOME`/DSComponents/lib:`dirname $DSHOME`/DSComponents/bin:$DSHOME/lib:$DSHOME/
uvdlls:`dirname $DSHOME`/PXEngine/lib:$ISHOME/jdk/jre/lib/amd64/j9vm:$ISHOME/jdk/jre/lib/amd64:$ASBHOME
/lib/cpp:$ASBHOME/apps/proxy/cpp/linux-all-x86_64:$NZ_HOME/lib64:$ORACLE_HOME/lib:$ORACLE_HOME/sqlplus/
lib:/app/IBM/InformationServer/Server/PXEngine/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
Last edited by Childrensmn on Fri Dec 09, 2016 12:55 pm, edited 2 times in total.
UCDI
Premium Member
Premium Member
Posts: 383
Joined: Mon Mar 21, 2016 2:00 pm

Post by UCDI »

You are returning a POINTER not a VALUE. I fixed it for you above.

Also, there are specific compiler options to make a library that DS can call.

g++ -O -fPIC -Wno-deprecated -m64 -mtune=generic -mcmodel=small -shared -m64 -c $1

where $1 is your source file.
you might need more if you have multiple files, this is to compile a simple monolithic source file. Make is beyond me, Im a visual studio kind of guy...

yours is similar but slightly different from mine. It could be something in those differences? I can try to help -- I am very good at realtime C++ but am only low-moderate at unix.
Post Reply