ASG
IBM
Zystems
Cressida
Icon
Netflexity
 
  MQSeries.net
Search  Search       Tech Exchange      Education      Certifications      Library      Info Center      SupportPacs      LinkedIn  Search  Search                                                                   FAQ  FAQ   Usergroups  Usergroups
 
Register  ::  Log in Log in to check your private messages
 
RSS Feed - WebSphere MQ Support RSS Feed - Message Broker Support

MQSeries.net Forum Index » IBM MQ API Support » Building an API exit on Solaris

Post new topic  Reply to topic
 Building an API exit on Solaris « View previous topic :: View next topic » 
Author Message
aboggis
PostPosted: Wed Oct 15, 2003 1:51 pm    Post subject: Building an API exit on Solaris Reply with quote

Centurion

Joined: 18 Dec 2001
Posts: 105
Location: Auburn, California

I am trying to get MQ to run my API exit, written in C++ (it's a hacked version of the sample amqsaxe0.c). It works fine under Windows.

I am using the following to build the .so file:

Code:
CC -mt mqAPIExit.cpp -G -o mqAPIExit.so -lmqmzf -lmqm -lmqmcs -lmqmzse


and no errors are generated, and the output is generated.

I have added the following to qm.ini:

Code:
ApiExitLocal:
   Sequence=100
   Function=EntryPoint
   Module=/var/mqm/exits/mqAPIExit.so
   Name=mqAPIExit
   Data=16


But when I try to start the qmgr I get the following:

Code:
[aboggis@vdpsusptar01:/var/mqm/trace]$ strmqm TEST
AMQ7214: The module '/var/mqm/exits/mqAPIExit.so' for Api Exit 'mqAPIExit'
could not be loaded for reason xecU_S_LOAD_FAILED.


I have tried running an early trace, but all the trace files give me is the same return code info, so I am suspecting that my build is not good.

Any help/comments appreciated,

Regards,

tonyB.
Back to top
View user's profile Send private message AIM Address Yahoo Messenger
clindsey
PostPosted: Wed Oct 15, 2003 4:56 pm    Post subject: Reply with quote

Knight

Joined: 12 Jul 2002
Posts: 586
Location: Dallas, Tx

Tony,

A couple of suggestions. Add "-hEntryPoint" to export the entrypoint name and leave off the .so extension.
Note that the sample in /opt/mqm/samp/bin is just "amqsaxe", no lib prefix or .so extension.

Here is a make file that will build an apiexit on Solaris. If you save as amqsaxe.mak, then build with make -f amqsaxe.mak

Code:

# amqsaxe.mak
# build an API Exit on solaris
APIEXIT = amqsaxe
ENTRY   = EntryPoint

#------------------------------------------------------------------
# set OUTDIR to create dll in a path other than current directory 
#------------------------------------------------------------------
OUTDIR = .

#------------------------------------------------------------------
# Forte C compiler                 
#------------------------------------------------------------------
CC = cc
LINK = ld

#------------------------------------------------------------------
# Compile flags for non-debug build
#------------------------------------------------------------------
CFLAGS = -c -KPIC -mt

#------------------------------------------------------------------
# Link flags for non-debug build
#------------------------------------------------------------------
LINKFLAGS = -dy -G -h$(ENTRY)

#------------------------------------------------------------------
# Link libraries
#------------------------------------------------------------------
LIBS = -lmqm -lmqmzf
 
COPY = cp
ERASE = rm
 
ALL :   \
        $(OUTDIR)\lib$(APIEXIT)
       

#------------------------------------------------------------------
# run make CLEAN to remove working files
#------------------------------------------------------------------
CLEAN: 
   $(ERASE) *.o *.map $(APIEXIT)
       

#------------------------------------------------------------------
# List of object file to be built
#------------------------------------------------------------------
APIEXIT_OBJS = amqsaxe0.o


#------------------------------------------------------------------
# List of object file dependencies
#------------------------------------------------------------------
amqsaxe0.o: amqsaxe0.c
   $(CC) $(CFLAGS) amqsaxe0.c

 
#------------------------------------------------------------------
# Generate the shared libs
#------------------------------------------------------------------
$(OUTDIR)\lib$(APIEXIT): $(APIEXIT_OBJS)
   $(LINK) $(LINKFLAGS) -o $(APIEXIT) $(APIEXIT_OBJS) $(LIBS)
Back to top
View user's profile Send private message
aboggis
PostPosted: Thu Oct 16, 2003 10:57 am    Post subject: Reply with quote

Centurion

Joined: 18 Dec 2001
Posts: 105
Location: Auburn, California

Thanks for the info.

I took your details from the makefile above and successfully built the module (using CC), but still get the same MQ error.

Here's my options:

Code:
CC -c -KPIC -mt mqAPIExit.cpp
ld -dy -G -hEntryPoint -o mqAPIExit mqAPIExit.o -lmqm -lmqmzf


Here's the compiler/linker info:
Code:
[aboggis@vdpsusdvas01:~/mqAPIExit]$ CC -V     
CC: Sun WorkShop 6 update 2 C++ 5.3 Patch 111685-14 2003/03/24
[aboggis@vdpsusdvas01:~/mqAPIExit]$ ld -V
ld: Software Generation Utilities - Solaris Link Editors: 5.8-1.277
[aboggis@vdpsusdvas01:~/mqAPIExit]$


I do notice just a couple of differences between the binary 'amqsaxe' and my file.

Code:
[aboggis@vdpsusptar01:~]$ ls -l /var/mqm/exits/
total 88
-rwxrwsr-x   1 mqm      mqm         1532 Sep 15 15:00 amqsaxe
-rwxr-xr-x   1 aboggis  mqm        42956 Oct 16 11:53 mqAPIExit


I don't really understand why my file is so much larger (unless it's something to do with how the Sun C++ compiler/linker generates code). Also the owner/group is different. Would these have an effect?
Back to top
View user's profile Send private message AIM Address Yahoo Messenger
aboggis
PostPosted: Thu Oct 16, 2003 11:48 am    Post subject: Reply with quote

Centurion

Joined: 18 Dec 2001
Posts: 105
Location: Auburn, California

At the suggestion of Peter (from the MQSeries Mailing List), I tried the following also:

Code:
CC -c -O -mt -KPIC mqAPIExit.cpp -o mqAPIExit.o
CC -G -mt -lmqmzf -lmqm -lmqmcs -lmqmzse mqAPIExit.o -o mqAPIExit.so


This generated the following:

Code:
total 160
drwxrwxr-x   2 mqm      mqm          512 Oct 16 12:40 .
drwxrwxr-x   9 mqm      mqm          512 Sep 30 15:22 ..
-rwxrwsr-x   1 mqm      mqm         1532 Sep 15 15:00 amqsaxe
-rwxr-xr-x   1 aboggis  mqm        42956 Oct 16 11:53 mqAPIExit
-rwxr-xr-x   1 aboggis  mqm        34648 Oct 16 12:39 mqAPIExit.so


Different size again... ?
Back to top
View user's profile Send private message AIM Address Yahoo Messenger
harwinderr
PostPosted: Thu Oct 16, 2003 8:43 pm    Post subject: Reply with quote

Voyager

Joined: 29 Jan 2002
Posts: 90

Make sure that the APIExit is in your LD_LIBRARY_PATH.
Back to top
View user's profile Send private message Yahoo Messenger MSN Messenger
aboggis
PostPosted: Tue Oct 21, 2003 9:34 am    Post subject: Reply with quote

Centurion

Joined: 18 Dec 2001
Posts: 105
Location: Auburn, California

Quote:
Make sure that the APIExit is in your LD_LIBRARY_PATH.

Not required. I can run/use the pre-built APIExit (amqsaxe) fine. Doesn't need to be on LD_LIBRARY_PATH at all.

Is anyone reading this?

Anyway. Instead of trying to continue with my own, home grown code, I thought I simply try compiling the suppied source for amqsaxe (amqsaxe0.c).

Using Forte Developer 6 (Workshop 6.0 FCS 2001/05/06), here's the compiler commands that generate a binary (that still doesn't work):

Code:
/opt/SUNWspro/WS6U2/bin/cc -mt -s -c -Kpic  -o output/amqsaxe0.o amqsaxe0.c
CC -G -o output/amqsaxe -h amqsaxe -norunpath output/amqsaxe0.o


I wish that IBM would supply the makefiles/build-scripts to go along with the sample code.

Here's the whole makefile:
Code:
## -*- Makefile -*-
##
## Project: /home/aboggis/amqsaxe/amqsaxe.prd
## User: aboggis
## Time: 03/10/20 10:49:39
## Makefile created by Sun WorkShop.
##
## This file is generated automatically -- DO NOT EDIT.
##



project: output/amqsaxe

##### Compilers and tools definitions shared by all build objects #####
CC=/opt/SUNWspro/WS6U2/bin/cc
CFLAGS=-mt -s


###### Target: amqsaxe ######
TARGETDIR_AMQSAXE=output
CFLAGS_AMQSAXE=-Kpic
OBJS_AMQSAXE = \
   $(TARGETDIR_AMQSAXE)/amqsaxe0.o


# Link or archive
output/amqsaxe: $(OBJS_AMQSAXE)
   $(LINK.cc)  $(CCFLAGS_AMQSAXE) $(CPPFLAGS_AMQSAXE) -G -o output/amqsaxe -h amqsaxe -norunpath $(OBJS_AMQSAXE)

# Compile source files into .o's
$(TARGETDIR_AMQSAXE)/amqsaxe0.o: amqsaxe0.c
   $(COMPILE.c) $(CFLAGS_AMQSAXE) $(CPPFLAGS_AMQSAXE) -o $(TARGETDIR_AMQSAXE)/amqsaxe0.o amqsaxe0.c


###### clean target: deletes generated files ######
clean:
   $(RM) \
   output/amqsaxe \
   $(TARGETDIR_AMQSAXE)/amqsaxe0.o

# Enable dependency checking
.KEEP_STATE:
.KEEP_STATE_FILE: /home/aboggis/amqsaxe/.make.state.Makefile.aboggis.amqsaxe


Heeeeellllppppp meeeeeee
Back to top
View user's profile Send private message AIM Address Yahoo Messenger
EddieA
PostPosted: Tue Oct 21, 2003 1:34 pm    Post subject: Reply with quote

Jedi

Joined: 28 Jun 2001
Posts: 2453
Location: Los Angeles

Tony,

Just a wild guess, because something simililar bit me with a 'normal' MQ proggie. It compiled, but wouldn't run.

I see you're using the SUNWspro compiler, which is the correct one, although the examples don't have the WS6U2 path in them Have you also got the SUNWspro/lib in the LD_LIBRARY path when you compile/link.

Cheers,
_________________
Eddie Atherton
IBM Certified Solution Developer - WebSphere Message Broker V6.1
IBM Certified Solution Developer - WebSphere Message Broker V7.0
Back to top
View user's profile Send private message
aboggis
PostPosted: Tue Oct 21, 2003 5:49 pm    Post subject: Reply with quote

Centurion

Joined: 18 Dec 2001
Posts: 105
Location: Auburn, California

You're my hero Eddie

I'm not 100% certain that was the answer, but that certainly seems to work. I noticed that my makefile was missing explicit linking of libmqm.so & libmqmzf.so, so I added those also.

Note to self: Make sure Solaris profile is updated.

Note to IBM: A little bit more detail in the Application Programming Reference / Guide on building exits and MQ applications in general for supported compilers. *OR* at least ship the makefiles for all the supplied sample programs.

Now that I have a working build to go from, I'll see if I can get a C++ version of the exit working.
Back to top
View user's profile Send private message AIM Address Yahoo Messenger
aboggis
PostPosted: Tue Oct 21, 2003 5:55 pm    Post subject: Reply with quote

Centurion

Joined: 18 Dec 2001
Posts: 105
Location: Auburn, California

For future reference here's the generated makefile:

Code:
## -*- Makefile -*-
##
## Project: /home/aboggis/amqsaxe/amqsaxe.prd
## User: aboggis
## Time: 03/10/21 18:30:50
## Makefile created by Sun WorkShop.
##
## This file is generated automatically -- DO NOT EDIT.
##



project: output/amqsaxe

##### Compilers and tools definitions shared by all build objects #####
CC=/opt/SUNWspro/WS6U2/bin/cc
CFLAGS=-mt


###### Target: amqsaxe ######
TARGETDIR_AMQSAXE=output
CFLAGS_AMQSAXE=-Kpic
CPPFLAGS_AMQSAXE += \
        -I/opt/mqm/inc
OBJS_AMQSAXE = \
        $(TARGETDIR_AMQSAXE)/amqsaxe0.o \
        /opt/mqm/lib/libmqm.so \
        /opt/mqm/lib/libmqmzf.so


# Link or archive
output/amqsaxe: $(OBJS_AMQSAXE)
        $(LINK.cc)  $(CCFLAGS_AMQSAXE) $(CPPFLAGS_AMQSAXE) -G -o output/amqsaxe -h amqsaxe -norunpath $(OBJS_AM
QSAXE)

# Compile source files into .o's
$(TARGETDIR_AMQSAXE)/amqsaxe0.o: amqsaxe0.c
        $(COMPILE.c) $(CFLAGS_AMQSAXE) $(CPPFLAGS_AMQSAXE) -o $(TARGETDIR_AMQSAXE)/amqsaxe0.o amqsaxe0.c


###### clean target: deletes generated files ######
clean:
        $(RM) \
        output/amqsaxe \
        $(TARGETDIR_AMQSAXE)/amqsaxe0.o

# Enable dependency checking
.KEEP_STATE:
.KEEP_STATE_FILE: /home/aboggis/amqsaxe/.make.state.Makefile.aboggis.amqsaxe
Back to top
View user's profile Send private message AIM Address Yahoo Messenger
j1
PostPosted: Tue Apr 11, 2006 11:11 am    Post subject: Reply with quote

Centurion

Joined: 23 Jun 2003
Posts: 139

I am getting the very same error, even though I am just trying to run the IBM supplied API exit amqsaxe. This is MQ 6.0.1 on Soalris. any ideas ?
Back to top
View user's profile Send private message
jefflowrey
PostPosted: Tue Apr 11, 2006 11:13 am    Post subject: Reply with quote

Grand Poobah

Joined: 16 Oct 2002
Posts: 19981

Which error? There are a few in this topic.
_________________
I am *not* the model of the modern major general.
Back to top
View user's profile Send private message
j1
PostPosted: Tue Apr 11, 2006 11:25 am    Post subject: Reply with quote

Centurion

Joined: 23 Jun 2003
Posts: 139

This one

Quote:

----- amqxufnx.c : 1158 -------------------------------------------------------
04/11/06 03:24:41 PM - Process(2640.1) User(mqm) Program(nsqmq)
AMQ7214: The module for API Exit 'SampleApiExit' could not be loaded.

EXPLANATION:
The module '/opt/mqm/samp/bin/amqsaxe' for API Exit 'SampleApiExit' could not
be loaded for reason xecU_S_LOAD_FAILED.
ACTION:
Correct the problem with the API Exit module 'SampleApiExit'.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic  Reply to topic Page 1 of 1

MQSeries.net Forum Index » IBM MQ API Support » Building an API exit on Solaris
Jump to:  



You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
Protected by Anti-Spam ACP
 
 


Theme by Dustin Baccetti
Powered by phpBB © 2001, 2002 phpBB Group

Copyright © MQSeries.net. All rights reserved.