On Sat, Oct 5, 2013 at 3:15 PM, Baruch Burstein <[email protected]>wrote:
>
> On Sat, Oct 5, 2013 at 4:52 AM, Jon <[email protected]> wrote:
>
>>
>> Heh heh, Incongruous it's your luck day.
>>
>> JonY, gave you all the answers and you didn't even have to dig. Oh well,
>> the Socratic method is overrated and irritating after about two questions ;)
>>
>> I have been trying to piece together this type of information for the
> past few months (when I have time). Do you know of any good source for
> things like this (understanding the different parts of the toolchain and
> how they work together, compiling and cross compiling, binutils, etc.). I
> have basically been using Google when I know the name of the puzzle piece I
> need info about, but I don't even always know that, and depending on the
> tool/stage. Google may be very helpful or near useless (not actually
> Google, but the available documentation is sometimes very lacking)
>
>
Rather than searching for The Single Source of Knowledge, I've found the
melding of multiple sources of info with relentless curiosity and
experimentation to be potent. Throw enough info at one's brain, mix in
roll-up-your-sleeves-sweat-equity, court serendipity (force yourself to
experience new people and new ideas), introspect, have patience to let time
work its magic, and I think you'll be shocked at how skilled you become.
Patience and managing ones own expectations is critical. We often cause
ourselves great angst and frustration by falling prey to the expectation
that learning all the tools and different platform intricacies should
happen instantaneously. Progress is chunky. Sometimes a lot happens all at
once, other times it's incremental. One step at a time regardless of the
step size.
Oh, but you were looking for something a bit less abstract? ;)
While each of us best learn in our own individualistic way, I've found the
following to be helpful. I'm very interested in hearing from others on the
ML about their Learning Accelerators.
1a) Create toy apps to learn the fundamentals of gcc/g++ and the key
binutils tools: ld, nm, objdump, and ar. Focus on learning the basics of
what the tools are used for and don't get mired down in trying to remember
all the options and corner cases. Iterate.
1b) Read the docs. Seriously. Maintainers often pour their souls into
creating good documentation. Don't be so lazy as to disregard/disrespect
their time and efforts. Where maintainers haven't invested in good
documentation, jump in and help document. Writing good documentation often
leads to in-depth understanding.
https://sourceware.org/binutils/docs-2.23.1/binutils/index.html
http://gcc.gnu.org/onlinedocs/
In particular, I found Ian Lance Taylor's series on linkers to be, well,
incredible
http://www.airs.com/blog/archives/38
1c) Spelunk for cool system introspection tools. For example, on Windows
these are invaluable:
http://technet.microsoft.com/en-us/sysinternals/
http://winitor.com/
http://dependencywalker.com/
http://www.rohitab.com/apimonitor
1d) Investigate all your toy apps with GDB.
2) Familiarize yourself with the PE and ELF specifications. Bite a bit off
at a time and iterate rather than getting overwhelmed.
3) Familiarize yourself with how DLLs and SOs work and how different OS
loaders utilize them.
4) Invest time to lurk on this and other MLs. Take the time to try to
understand the posts with patches. For example, there is a lot to learn
from looking at recent patches from dw and LRN.
5) The autoconf documentation is a great way to gain a different
perspective on building apps. While I dislike (loathe is a bit to over the
top) autotools I have great respect for their power. Although the Quasimodo
of build tools makes things much easier for me, I've yet to be converted
into a raving partisan.
https://www.gnu.org/software/autoconf/manual/index.html
6) Work on increasingly more challenging problems. Specifically, search out
the difficult bugs in your favorite open source projects and tackle them
with abandon. Who cares how long it might take as long as you find the
obstacle to be an interesting next challenge.
While there's a lot to be said with playing with self-created toy apps,
NOTHING is as valuable to your learning as conquering meaningful,
real-world challenges that cause you to interact with other people
interested in the same area and court serendipity.
Jon
------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60134791&iu=/4140/ostg.clktrk
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public