This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: static vs. shared linking


On 25/03/2015 09:04, Corinna Vinschen wrote:
On Mar 24 18:39, David Stacey wrote:
On 24/03/2015 00:02, David Stacey wrote:
I've been having difficulty building poco-1.6.0 for Cygwin for some
time. I've managed to produce a test case that shows the problem:

https://dl.dropboxusercontent.com/u/119453582/Cygwin/crashtest.tar.xz

This archive contains source files that produce a very simple library.
When linked statically, the code works fine. However, when linked as a
shared DLL, the test crashes with a core dump. The behaviour is
identical on x86 and x86_64 architectures.

Have I made a stupid error in the compilation of the shared case, or is
something more interesting going on?
I don't know if anyone has managed to look at this. I haven't had a deluge
of e-mails telling me that I've done something silly (which is a shame,
because then I could fix it quickly and move on). For the sake of a straw to
clutch at, I tried compiling with clang++ rather than g++, and got the same
result:
$ ./go.sh
       Running test (static link)...
       Done.
Running test (shared link)...
       ./go.sh: line 19:  3744 Aborted                 (core dumped)
./shared_test
       Done.
Any help or hints would be greatly appreciated.
For a start, you should contemplate to build your test with -g to allow
debugging.  Then you can run the testcase under GDB and get (more or less)
useful output.  The crash occurs in a delete call, afaics.  If you
install the cygwin-debuginfo package, addr2line returns something like this
as the call stack (non-required path components removed):

[...]/cygwin/exceptions.cc:1247
[...]/cygwin/exceptions.cc:1501
[...]/cygwin/sigproc.cc:717
[...]/cygwin/signal.cc:252
[...]/cygwin/signal.cc:303
[...]/cygwin/signal.cc:313
[...]/cygwin/signal.cc:289
[...]/cygwin/signal.cc:375

Thank you for your comments - they were really helpful. Yes, I should have specified '-g' on the command line - that was an omission on my part - sorry.

I've never had much joy out of addr2line before, and I'm struggling to recreate what you've done. I've added '-g' to the command line, run 'go.sh' again. This generates a fresh stackdump file, and then I do:

awk '/^[0-9]/{print $2}' shared_test.exe.stackdump | addr2line -f -e shared_test.exe

but I just see question marks. Please could you show the exact lines you're using.

Many thanks,

Dave.



--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]