<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
</head>
<body>
This seems to work now, thanks. For my MWE I get nicely formatted stack traces. 
<div><br>
</div>
<div>However, one problem remains: if I try to link my actual application using virtually the same libraries on the command line, it fails with the following error:</div>
<div><br>
</div>
<div>
<div dir="auto">/usr/lib64/gcc/x86_64-suse-linux/4.9/../../../../x86_64-suse-linux/bin/ld: /pds/opt/llvm/lib/libLLVMSupport.a(Path.cpp.o): undefined reference to symbol '_ZNSs4_Rep10_M_destroyERKSaIcE@@GLIBCXX_3.4'</div>
<div dir="auto">/usr/lib64/libstdc++.so.6: error adding symbols: DSO missing from command line</div>
<div dir="auto"><br>
</div>
<div dir="auto">Selectively removing or adding libraries at the end of the linker command does not help. Any ideas what might be wrong here? </div>
<div dir="auto"><br>
</div>
<div dir="auto">Michael </div>
<div dir="auto"><br>
</div>
<div dir="auto">PS: this is the full command minus some object files omitted for clarity (llvm lives in /pds/opt/llvm):</div>
<div dir="auto"><br>
</div>
<div dir="auto"> /pds/opt/llvm/bin/clang++   -O0 -g3 -fno-inline -DCOMPILER_ATTRIBUTES -std=c++11 -stdlib=libc++ -Wall -Wextra -pedantic -Wshadow -Wfloat-equal -Wcast-align -Wfloat-equal -Wdisabled-optimization -Wformat=2 -Winvalid-pch -Winit-self -Wmissing-include-dirs
 -Wredundant-decls -Wpacked -Wpointer-arith -Wstack-protector -Wswitch-default -Wwrite-strings -Wno-type-safety -Werror -Wunused -Wno-infinite-recursion  -Wl,-rpath,/pds/opt/openmpi/lib64:/pds/opt/PointwiseV17.0R2/linux_x86_64/plugins:/pds/opt/intel/composer_xe_2015/lib/intel64/:/pds/opt/llvm/lib:/pds/opt/StarCD/lib:/pds/opt/torque/lib
 src/CMakeFiles/zfs.dir/zfscartesiangrid_inst_fv.cpp.o <many more object files here...> src/CMakeFiles/zfs.dir/main.cpp.o  -o src/zfs  -rdynamic /pds/opt/netcdf/lib64/libnetcdf.a /pds/opt/fftw/lib64/libfftw3.a /pds/opt/parallel-netcdf/lib/libpnetcdf.a /pds/opt/openmpi/lib64/libmpi_cxx.so
 /pds/opt/openmpi/lib64/libmpi.so /pds/opt/llvm/lib/libLLVMSupport.a -lrt -ldl -ltinfo -lpthread -lz -lm /pds/opt/llvm/lib/libc++abi.a -lpthread -lz -lm /pds/opt/llvm/lib/libc++abi.a -Wl,-rpath,/pds/opt/openmpi/lib64</div>
</div>
<br>
<br>
-------- Original message --------<br>
From: David Jones <djones@xtreme-eda.com> <br>
Date: 28/07/2015 19:05 (GMT+01:00) <br>
To: "Schlottke-Lakemper, Michael" <m.schlottke-lakemper@aia.rwth-aachen.de> <br>
Cc: Zachary Turner <zturner@google.com>, lldb-dev@cs.uiuc.edu <br>
Subject: Re: [lldb-dev] Use lldb.so to create stack trace <br>
<br>
<div>
<div dir="ltr">
<div>
<div>Linking is order-dependent:<br>
<br>
clang++ -std=c++11 -stdlib=libc++ -I/pds/opt/llvm/include mwe.cpp -o main -lc++ -lc++abi /pds/opt/llvm/lib/libLLVMSupport.a<br>
<br>
</div>
You are linking in LLVMSupport.a *after* libstdc++, so libstdc++ won't be used to resolve any symbols from LLVMSupport.a.<br>
<br>
</div>
Interchange the order of the linking, putting -lc++ at the end ought to work.<br>
<br>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Tue, Jul 28, 2015 at 12:02 PM, Schlottke-Lakemper, Michael
<span dir="ltr"><<a href="mailto:m.schlottke-lakemper@aia.rwth-aachen.de" target="_blank">m.schlottke-lakemper@aia.rwth-aachen.de</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
<div style="word-wrap:break-word">Hi Zachary,
<div><br>
</div>
<div>I tried to compile the following MWE</div>
<div><br>
</div>
<div>
<div>#include "llvm/Support/Signals.h"</div>
<div>#define __STDC_LIMIT_MACROS</div>
<div>#define __STDC_CONSTANT_MACROS</div>
<div>#include "llvm/Support/raw_ostream.h"</div>
<div><br>
</div>
<div>int main() {</div>
<div>  llvm::sys::PrintStackTrace(llvm::errs());</div>
<div>}</div>
<div><br>
</div>
<div>using the following command:</div>
<div><br>
</div>
<div>clang++ -std=c++11 -stdlib=libc++ -I/pds/opt/llvm/include mwe.cpp -o main -lc++ -lc++abi /pds/opt/llvm/lib/libLLVMSupport.a</div>
<div><br>
</div>
<div>This throws an error about missing the pthread library, so I add “-lpthread” to the end of the above line. However, this results in many, may errors like this:</div>
<div><br>
</div>
<div>
<div>/pds/opt/llvm/lib/libLLVMSupport.a(Debug.cpp.o): In function `llvm::isCurrentDebugType(char const*)':</div>
<div>/pds/opt/install/llvm/llvm-20150720-r242680-src/lib/Support/Debug.cpp:(.text._ZN4llvm18isCurrentDebugTypeEPKc+0xd7): undefined reference to `std::string::compare(char const*) const'</div>
</div>
<div>
<div>/pds/opt/llvm/lib/libLLVMSupport.a(Triple.cpp.o): In function `llvm::Triple::getLittleEndianArchVariant() const':</div>
<div>/pds/opt/install/llvm/llvm-20150720-r242680-src/lib/Support/Triple.cpp:(.text._ZNK4llvm6Triple26getLittleEndianArchVariantEv+0xb): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string
 const&)’</div>
</div>
<div>…</div>
<div><br>
</div>
<div>Any idea what I’m doing wrong?</div>
<div><br>
</div>
<div>Regards,</div>
<div><br>
</div>
<div>Michael</div>
<div>
<blockquote type="cite">
<div>
<div class="h5">
<div>On 28 Jul 2015, at 08:24 , Zachary Turner <<a href="mailto:zturner@google.com" target="_blank">zturner@google.com</a>> wrote:</div>
<br>
</div>
</div>
<div>
<div>
<div class="h5">
<div dir="ltr">#include "llvm/Support/Process.h"  // I think it's in process.h, going from memory here.
<div><br>
</div>
<div>void foo()</div>
<div>{</div>
<div>  llvm::sys::printStackTrace(llvm::outs);  // print to stdout</div>
<div><span style="line-height:1.5; font-size:13.1999998092651px">}</span><br>
</div>
<div><span style="line-height:1.5; font-size:13.1999998092651px"><br>
</span></div>
<div><span style="line-height:1.5; font-size:13.1999998092651px">If you want to write it to a std::string instead you can use an llvm::raw_string_ostream.</span></div>
<div><span style="line-height:1.5; font-size:13.1999998092651px"><br>
</span></div>
<div><span style="line-height:1.5; font-size:13.1999998092651px">If you need more help I can do so tomorrow or Wednesday when I'm back in the office.  The above should work across multiple platforms though (Windows, Mac, Linux) and be fully symbolized (if your
 program is built with debug information)</span></div>
</div>
<br>
</div>
</div>
<div class="gmail_quote">
<div>
<div class="h5">
<div dir="ltr">On Mon, Jul 27, 2015 at 11:14 PM Schlottke-Lakemper, Michael <<a href="mailto:m.schlottke-lakemper@aia.rwth-aachen.de" target="_blank">m.schlottke-lakemper@aia.rwth-aachen.de</a>> wrote:<br>
</div>
</div>
</div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
<div>
<div class="h5">That would work for me too - I just did not know that there is such a capability in LLVM itself. I believe I found the printStackTrace method to be in libLLVMSupport.a. Would you happen to know what I have to do (or where to find more help)
 to make use of it?<br>
<br>
Michael<br>
<br>
PS: Maybe this is getting too OT; if yes, please let me know.<br>
________________________________________<br>
From: Zachary Turner [<a href="mailto:zturner@google.com" target="_blank">zturner@google.com</a>]<br>
Sent: Tuesday, July 28, 2015 7:13 AM<br>
To: Schlottke-Lakemper, Michael; <a href="mailto:lldb-dev@cs.uiuc.edu" target="_blank">
lldb-dev@cs.uiuc.edu</a><br>
Subject: Re: [lldb-dev] Use lldb.so to create stack trace<br>
<br>
Instead of linking lldb.so, which is basically an entire debugger, maybe you could just link llvm?  I don't remember which library has the stack trace function in llvm, but the function I believe is called llvm::sys::printStackTrace().  This will give you a
 much smaller overhead than bringing in all of lldb unnecessarily.<br>
<br>
On Mon, Jul 27, 2015 at 10:12 PM Schlottke-Lakemper, Michael <<a href="mailto:m.schlottke-lakemper@aia.rwth-aachen.de" target="_blank">m.schlottke-lakemper@aia.rwth-aachen.de</a><mailto:<a href="mailto:m.schlottke-lakemper@aia.rwth-aachen.de" target="_blank">m.schlottke-lakemper@aia.rwth-aachen.de</a>>>
 wrote:<br>
Hi folks,<br>
<br>
We are looking for a way to use lldb.so to print out a stack trace programmatically. In our scientific simulation tool (written in C++) ,  we use a custom terminate function where we are already able to print stack traces in case of an abnormal abort, which
 uses some gcc-specific magic.<br>
<br>
My idea is to link our tool to lldb.so when compiling for debugging and to use the library to print a stack trace programmatically, including demangled names and correct line numbers. However, I don't really know how to start thus I am wondering<br>
<br>
- has someone here done or seen something like this before?<br>
- is there a tutorial for linking to lldb.so and making use of it through C++?<br>
- would this also work when compiling with other compilers than clang?<br>
<br>
Any help or pointers to relevant projects/documentation etc is greatly appreciated!<br>
<br>
Regards,<br>
<br>
Michael<br>
<br>
--<br>
Michael Schlottke-Lakemper<br>
<br>
SimLab Highly Scalable Fluids & Solids Engineering<br>
Jülich Aachen Research Alliance (JARA-HPC)<br>
RWTH Aachen University<br>
<br>
Wüllnerstraße 5a<br>
52062 Aachen<br>
Germany<br>
<br>
Phone: <a href="tel:%2B49%20%28241%29%2080%2095188" value="+492418095188" target="_blank">
+49 (241) 80 95188</a><br>
Fax: <a href="tel:%2B49%20%28241%29%2080%2092257" value="+492418092257" target="_blank">
+49 (241) 80 92257</a><br>
Mail: <a href="mailto:m.schlottke-lakemper@aia.rwth-aachen.de" target="_blank">m.schlottke-lakemper@aia.rwth-aachen.de</a><mailto:<a href="mailto:m.schlottke-lakemper@aia.rwth-aachen.de" target="_blank">m.schlottke-lakemper@aia.rwth-aachen.de</a>><br>
</div>
</div>
Web: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__www.jara.org_jara-2Dhpc&d=AwMGaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=DDUMf06MYELAe1Nlv7KChiwJLLHbYha4jtK_AOiWqwQ&m=e5biF0KrgwLV9z9kT0mgwqOW3D8g4dmTLWxt_TkPFHA&s=Rn4LbHZiRQmZnGqtm7LWoWd7UuqIIGKIzP_YMNsmDo8&e=" rel="noreferrer" target="_blank">
http://www.jara.org/jara-hpc</a><span class=""><br>
<br>
_______________________________________________<br>
lldb-dev mailing list<br>
<a href="mailto:lldb-dev@cs.uiuc.edu" target="_blank">lldb-dev@cs.uiuc.edu</a><mailto:<a href="mailto:lldb-dev@cs.uiuc.edu" target="_blank">lldb-dev@cs.uiuc.edu</a>><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev</a><br>
</span></blockquote>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</div>
<br>
_______________________________________________<br>
lldb-dev mailing list<br>
<a href="mailto:lldb-dev@cs.uiuc.edu">lldb-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev</a><br>
<br>
</blockquote>
</div>
<br>
</div>
</div>
</body>
</html>