static vs. shared linking
David Stacey
drstacey@tiscali.co.uk
Wed Mar 25 22:48:00 GMT 2015
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
More information about the Cygwin
mailing list