Re: Building a DLL under USS
Thank you all for your hints. Building unter USS seems ver tricky to me When I use "-qdll" with "cc", then I get "unknwon option -d" :-( When I use "-qdll" with "c89", then I get "unknwon option -q" :-( Now, after playing a while I got it working... I use "xlc" now and compile and link in one step. The DLLs that are generated are all at least two times larger as the DLLs produced by the Compiler unter z/OS Batch. But... they are working now (can be loaded and used) Again, thank you fpr your suggestions Bye, Michael -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@bama.ua.edu with the message: GET IBM-MAIN INFO Search the archives at http://bama.ua.edu/archives/ibm-main.html
Re: Building a DLL under USS
Michael Knigge wrote: All, today I came accross a somehow strange (at least for me) problem Usually I build my DLLs (written in C and C++) in the MVS-World of z/OS. But now I want to build the same DLL under USS (because I can do this all remote using SSH). When I try to compile and link my DLL (it's just one C-Source file) in one command, the DLL get's build, but somehow doesn't work (can't be loaded and/or the enty-points are not found). Furthermore the DLL is much larger as if it is build under MVS. like this: c89 -Wc,"MY,OPTIONS" -Wl,"MY_OTHER_OPTIONS" -o libfoo.so foo.c I would suggest adding the -e flag with a null value; to take your example above, try: c89 -Wc,"MY,OPTIONS" -Wl,"MY_OTHER_OPTIONS" -o libfoo.so foo.c -e // If I compile the module with the "-c" switch (--> don't link) and then link the module to a DLL in a second step, the Linker tells me that CEESTART can't be resolved c89 -c -Wc,"MY,OPTIONS" foo.c c89 -Wl,"MY_OTHER_OPTIONS" -o libfoo.so foo.o It seems so me that (for some reason) the linker dosn't know where to look for the LE-Runtimes - but the file /usr/lpp/cbclib/xlc/etc/usr/lpp/cbclib/xlc/ looks ok so far Would be great if anyone has an idea Thank you, Michael P.S.: Just to be complete, here are my compiler and linker options: Compiler: DLL(CBA) ILP32 TUNE(0) ARCH(0) FLOAT(IEEE) LANGLVL(EXTENDED) TARGET(LE) NOOPT LONGNAME SOURCE ROSTRING OBJECT PLIST(HOST) NOOE NOSTRICT_INDUC NOWSIZEOF NOSEQUENCE NOMARGINS NOINLINE NOLIST NOOFFSET NOCOMPACT NOCOMPRESS NOIGNERRNO NOINITAUTO EXECOPS DEFINE(_OS390) DEFINE(_OE_SOCKETS) DEFINE(_OPEN_THREADS) DEFINE(_LARGE_FILES) DEFINE(_POSIX_SOURCE) DEFINE(_ISOC99_SOURCE) DEFINE(_UNIX03_SOURCE) DEFINE(_XOPEN_SOURCE_EXTENDED=1) DEFINE(_XOPEN_SOURCE=500) DEFINE(NEEDSIEEE754) DEFINE(NEEDSLONGLONG) Linker: AMODE=31 RMODE=ANY CASE=MIXED DYNAM=DLL REUS=RENT UPCASE=NO LIST MAP XREF -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@bama.ua.edu with the message: GET IBM-MAIN INFO Search the archives at http://bama.ua.edu/archives/ibm-main.html -- Kind regards, -Steve Comstock The Trainer's Friend, Inc. 303-393-8716 http://www.trainersfriend.com * z/OS application programmer training + Instructor-led on-site classroom based classes + Course materials licensing + Remote contact training + Roadshows + Course development -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@bama.ua.edu with the message: GET IBM-MAIN INFO Search the archives at http://bama.ua.edu/archives/ibm-main.html
Re: Building a DLL under USS
Hi Michael, I have not checked whether our DLLs are better/faster/larger in USS or MVS as we have built using "cc" in USS for a number of years now as we use gmake and the build is very similar to all other Unix/Linux machines we build on. We compile and then link and our code works when called from MVS or from USS. Here is a sample output from our make. This DLL also only has one entry point which then resolves all others back to the caller within a structure of pointers. We make COPT (g -DYYDEBUG -Iincludes/ -Llibraries/) common to both compiles and links. cc -c -g -DYYDEBUG-Iincludes/ -Llibraries/ -Wc,"CSECT(dllprog_init),EXECOPS,EXPORTALL,DLL(CBA)" dllprog.c cc -Wl,dll -g -DYYDEBUG-Iincludes/ -Llibraries/ -o dllprog.so dllprog.o -llib1 -llib2 Through trial and error I also define the following environment variable: declare -x _CC_INCDIRS="/usr/include /usr/local/include" declare -x _CC_LIBDIRS="/usr/lib /usr/local/lib" declare -x _CXX_CXXSUFFIX="cpp" declare -x _CXX_INCDIRS="/usr/include /usr/local/include" declare -x _CXX_LIBDIRS="/usr/lib /usr/local/lib" declare -x _C89_INCLIBS="//'DSN910.SDSNC.H'" declare -x _C89_LSYSLIB="CEE.SCEELKEX:CEE.SCEELKED:SYS1.CSSLIB:DSN910.SDSNLOAD" declare -x STEPLIB="CBC.SCCNCMP:DSN910.DB9G.SDSNEXIT:DSN910.SDSNLOAD" HTH regards Patrick http://www.codemagus.com Patrick Hayward, Code Magus Limited (England reg. no. 4024745) On 04/15/10 16:00, Michael Knigge wrote: > All, > > today I came accross a somehow strange (at least for me) problem > > > Usually I build my DLLs (written in C and C++) in the MVS-World of > z/OS. But now I want to build the same DLL under USS (because I can do > this all remote using SSH). > > When I try to compile and link my DLL (it's just one C-Source file) in > one command, the DLL get's build, but somehow doesn't work (can't be > loaded and/or the enty-points are not found). Furthermore the DLL is > much larger as if it is build under MVS. > > like this: > > c89 -Wc,"MY,OPTIONS" -Wl,"MY_OTHER_OPTIONS" -o libfoo.so foo.c > > > > If I compile the module with the "-c" switch (--> don't link) and then > link the module to a DLL in a second step, the Linker tells me that > CEESTART can't be resolved > > c89 -c -Wc,"MY,OPTIONS" foo.c > c89 -Wl,"MY_OTHER_OPTIONS" -o libfoo.so foo.o > > It seems so me that (for some reason) the linker dosn't know where to > look for the LE-Runtimes - but the file > >/usr/lpp/cbclib/xlc/etc/usr/lpp/cbclib/xlc/ > > looks ok so far > > > > Would be great if anyone has an idea > > > Thank you, > Michael > > > > > > P.S.: Just to be complete, here are my compiler and linker options: > > > Compiler: > > > DLL(CBA) > ILP32 > TUNE(0) > ARCH(0) > FLOAT(IEEE) > LANGLVL(EXTENDED) > TARGET(LE) > NOOPT > LONGNAME > SOURCE > ROSTRING > OBJECT > PLIST(HOST) > NOOE > NOSTRICT_INDUC > NOWSIZEOF > NOSEQUENCE > NOMARGINS > NOINLINE > NOLIST > NOOFFSET > NOCOMPACT > NOCOMPRESS > NOIGNERRNO > NOINITAUTO > EXECOPS > DEFINE(_OS390) > DEFINE(_OE_SOCKETS) > DEFINE(_OPEN_THREADS) > DEFINE(_LARGE_FILES) > DEFINE(_POSIX_SOURCE) > DEFINE(_ISOC99_SOURCE) > DEFINE(_UNIX03_SOURCE) > DEFINE(_XOPEN_SOURCE_EXTENDED=1) > DEFINE(_XOPEN_SOURCE=500) > DEFINE(NEEDSIEEE754) > DEFINE(NEEDSLONGLONG) > > > Linker: > > AMODE=31 > RMODE=ANY > CASE=MIXED > DYNAM=DLL > REUS=RENT > UPCASE=NO > LIST > MAP > XREF > > -- > For IBM-MAIN subscribe / signoff / archive access instructions, > send email to lists...@bama.ua.edu with the message: GET IBM-MAIN INFO > Search the archives at http://bama.ua.edu/archives/ibm-main.html > -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@bama.ua.edu with the message: GET IBM-MAIN INFO Search the archives at http://bama.ua.edu/archives/ibm-main.html
Building a DLL under USS
All, today I came accross a somehow strange (at least for me) problem Usually I build my DLLs (written in C and C++) in the MVS-World of z/OS. But now I want to build the same DLL under USS (because I can do this all remote using SSH). When I try to compile and link my DLL (it's just one C-Source file) in one command, the DLL get's build, but somehow doesn't work (can't be loaded and/or the enty-points are not found). Furthermore the DLL is much larger as if it is build under MVS. like this: c89 -Wc,"MY,OPTIONS" -Wl,"MY_OTHER_OPTIONS" -o libfoo.so foo.c If I compile the module with the "-c" switch (--> don't link) and then link the module to a DLL in a second step, the Linker tells me that CEESTART can't be resolved c89 -c -Wc,"MY,OPTIONS" foo.c c89 -Wl,"MY_OTHER_OPTIONS" -o libfoo.so foo.o It seems so me that (for some reason) the linker dosn't know where to look for the LE-Runtimes - but the file /usr/lpp/cbclib/xlc/etc/usr/lpp/cbclib/xlc/ looks ok so far Would be great if anyone has an idea Thank you, Michael P.S.: Just to be complete, here are my compiler and linker options: Compiler: DLL(CBA) ILP32 TUNE(0) ARCH(0) FLOAT(IEEE) LANGLVL(EXTENDED) TARGET(LE) NOOPT LONGNAME SOURCE ROSTRING OBJECT PLIST(HOST) NOOE NOSTRICT_INDUC NOWSIZEOF NOSEQUENCE NOMARGINS NOINLINE NOLIST NOOFFSET NOCOMPACT NOCOMPRESS NOIGNERRNO NOINITAUTO EXECOPS DEFINE(_OS390) DEFINE(_OE_SOCKETS) DEFINE(_OPEN_THREADS) DEFINE(_LARGE_FILES) DEFINE(_POSIX_SOURCE) DEFINE(_ISOC99_SOURCE) DEFINE(_UNIX03_SOURCE) DEFINE(_XOPEN_SOURCE_EXTENDED=1) DEFINE(_XOPEN_SOURCE=500) DEFINE(NEEDSIEEE754) DEFINE(NEEDSLONGLONG) Linker: AMODE=31 RMODE=ANY CASE=MIXED DYNAM=DLL REUS=RENT UPCASE=NO LIST MAP XREF -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@bama.ua.edu with the message: GET IBM-MAIN INFO Search the archives at http://bama.ua.edu/archives/ibm-main.html