You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@axis.apache.org by Senaka Fernando <se...@wso2.com> on 2008/03/19 21:01:25 UTC
[Fwd: Re: Axis2/C,
C++ and 'undefined symbol: __gxx_personality_v0']
---------------------------- Original Message ----------------------------
Subject: Re: Axis2/C, C++ and 'undefined symbol: __gxx_personality_v0'
From: "Senaka Fernando" <se...@wso2.com>
Date: Thu, March 20, 2008 1:04 am
To: axis-c-user@ws.apache.org
--------------------------------------------------------------------------
Hi Alex,
Well I think that the extern "C" caused the seg_fault as it couldn't
locate the function name. :D... I missed that out I believe. The extern
"C" requirement is on the Axis2/C FAQ.
Also, the LD_PRELOAD is a satisfactory solution. Also, have you tried
setting the LIBS environment variable before building the source? I'd
rather prefer the LIBS option, because setting LD_PRELOAD can sometimes be
cumbersome. However, if you are using a binary release you have to resort
to LD_PRELOAD. Therefore, I think that we can add this to our FAQ too.
Regards,
Senaka
N.B.: CCs sent to user and dev lists.
> OK, I used LD_PRELAOD env. variable to preload the libstdc++.so when
> starting the axis2_http_server, like this:
>
> LD_PRELOAD=/usr/lib/libstdc++.so.6 ./axis2_http_server -r ${AXIS2C_HOME}
> -l 6 &
>
> and now my test runs successfully: the client sends a request, I see
> in the axis log tracing of function calls that I added to every
> function in my service, and then the client receives a response.
>
> I'm not sure that a solution with LD_PRELOAD is a good one, does any
> one have an opinion?
>
> Anyway, in production all this is going to run as a Apache httpd
> module, and we already know how to load libstdc++.so into the httpd,
> so I'm going now to build the mod_axis and try to run the test again,
> now with httpd :)
>
>
>> But, amazingly I never got, undefined symbol: __gxx_personality_v0.
>>
>> Instead my server seg_faulted and crashed.
>
> Senaka, after I did something (I don't remember exactly what, I have
> done a lot of experimenting this morning) I also stopped getting
> undefined __gxx_personality_v0 and the server just started crashing
> (SIGSEGV); and when I run gdb on the core file, I also saw the that
> the crash was occurring in the AXIS2_SVC_SKELETON_INIT().
>
> But then, after some more experimenting, I added 'extern "C"' to the
> functions axis2_get_instance() and axis2_remove_instance() in my test
> service, and the test run successfully. Well, at least this is what I
> think fixed this crash :).
>
> So, two things so far: a) preload the libstdc++.so, and b) use 'extern
> "C"' on the functions that the Axis calls directly (that is, loads by
> name?)
>
>
> Thank you,
>
> alex.
>
>
> On Wed, Mar 19, 2008 at 10:44 AM, Senaka Fernando <se...@wso2.com> wrote:
>> Hi Alex,
>>
>> I tried Axis2/C with a C++ client and it works fine. However, when it
>> comes to server side, the message receiver can't invoke the
>> AXIS2_SVC_SKELETON_INIT(), probably because it was built in C instead
>> of
>> C++. Thus, I guess that you will have to rebuild axis2/C using g++ in
>> the
>> first place.
>>
>> But, amazingly I never got, undefined symbol: __gxx_personality_v0.
>>
>> Instead my server seg_faulted and crashed.
>>
>> Will work on this and let you know if I get through.
>>
>> Regards,
>> Senaka
>>
>>
>>
>> > I've tried with two versions: first, I downloaded and compiled latest
>> > released Axisc/2 v. 1.3.0 from the http://ws.apache.org/axis2/c;
>> after
>> > seeing this error, I downloaded a "WSO2 Web Services Framework for
>> > C++" from the http://wso2.org/projects/wsf/cpp, where, I hoped, given
>> > that the name includes "for C++", the C++ problems would be solved.
>> > This release, as I understand, includes Acis2/C version 1.2. The same
>> > error (with the same text returned by dlerror(), after I added
>> > logging of this) happens in both cases.
>>
>> >
>> >
>> > Thank you,
>> >
>> > alex.
>> >
>> >
>> > On Tue, Mar 18, 2008 at 10:36 PM, Manjula Peiris <ma...@wso2.com>
>> wrote:
>> >> Hi Bolgarov,
>> >>
>> >> What is the Axis2/C version you are using?
>> >>
>> >>
>> >>
>> >>
>> >> On Tue, 2008-03-18 at 17:17 -0400, Alex Bolgarov wrote:
>> >> > Hi,
>> >> >
>> >> > I'm trying to write a SOAP service using Axis2/C framework. I
>> need
>> >> the
>> >> > service to be written in a C++ language, so as a first step I
>> took an
>> >> > 'echo service' example from the Axis distribution, renamed it to
>> .cpp
>> >> > file and compiled/linked it with 'g++' compiler. No compile
>> errors
>> >> > reported, the resulting .so library I copied to the services
>> >> > directory, together with the corresponding services.xml file.
>> >> >
>> >> > I compiled a sample client that tries to send something to my new
>> >> service.
>> >> >
>> >> > Than I strarted an 'axis2_http_server' application and run the
>> >> client,
>> >> > which failed with a SOAP error message about failure to load a
>> dll.
>> >> >
>> >> > I found in the Axis2/C source code the place where it loads the
>> .so
>> >> > file (axutil_class_loader_load_lib() in file 'class_loader.c'),
>> and
>> >> > added debug log message that reports into the log the exact text
>> of
>> >> an
>> >> > error as it is returned by dlerror() function, not just a message
>> >> that
>> >> > if failed to load a library, like this (after line 156 of the
>> file
>> >> > 'class_loader.c'):
>> >> >
>> >> > if (!dl_handler)
>> >> > {
>> >> > AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
>> >> > "AXIS2_PLATFORM_LOADLIB error: [%s]",
>> >> > AXIS2_PLATFORM_LOADLIB_ERROR);
>> >> >
>> >> > ...
>> >> > ...
>> >> > ...
>> >> >
>> >> > after recompiling the Axis and running the test again, I see in
>> the
>> >> > log following message:
>> >> >
>> >> > class_loader.c(159) AXIS2_PLATFORM_LOADLIB error:
>> >> > [/home/alexb/wsfcpp-repo/services/my_service/libmy_service.so:
>> >> > undefined symbol: __gxx_personality_v0]
>> >> >
>> >> > I understand that the real problem is that the axis2_http_server
>> >> > application is not compiled/linked with the g++ support
>> libraries.
>> >> > Several years ago I had similar problem when writing a C++ module
>> for
>> >> > Apache's httpd server, but there the solution was to use an
>> httpd's
>> >> > directive 'LoadFile' to load the g++ runtime library into the
>> httpd
>> >> > environment before loading my C++ module with the LoadModule
>> >> > directive.
>> >> >
>> >> > So the question is, does anyone knows how to make the
>> >> > axis2_http_server to load the g++ runtime library before it loads
>> a
>> >> > C++ .so service library?
>> >> >
>> >> > For the record, I'm doing all this on the Ubuntu 7.10, and here
>> is a
>> >> > result of running 'g++ --version:
>> >> >
>> >> > $ g++ --version
>> >> > g++ (GCC) 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)
>> >> >
>> >> > ---------------------------------------------------------------------
>> >> > To unsubscribe, e-mail: axis-c-user-unsubscribe@ws.apache.org
>> >> > For additional commands, e-mail: axis-c-user-help@ws.apache.org
>> >> >
>> >>
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: axis-c-user-unsubscribe@ws.apache.org
>> >> For additional commands, e-mail: axis-c-user-help@ws.apache.org
>> >>
>> >>
>> >
>> > ---------------------------------------------------------------------
>> > To unsubscribe, e-mail: axis-c-user-unsubscribe@ws.apache.org
>> > For additional commands, e-mail: axis-c-user-help@ws.apache.org
>> >
>> >
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: axis-c-user-unsubscribe@ws.apache.org
>> For additional commands, e-mail: axis-c-user-help@ws.apache.org
>>
>>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-c-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-c-user-help@ws.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-c-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-c-dev-help@ws.apache.org