<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://elinux.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://elinux.org/api.php?action=feedcontributions&amp;user=Martyl&amp;feedformat=atom</id>
		<title>eLinux.org - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://elinux.org/api.php?action=feedcontributions&amp;user=Martyl&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://elinux.org/Special:Contributions/Martyl"/>
		<updated>2013-06-20T11:38:44Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.22alpha</generator>

	<entry>
		<id>http://elinux.org/GCC_Tips</id>
		<title>GCC Tips</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/GCC_Tips"/>
				<updated>2008-07-26T15:37:10Z</updated>
		
		<summary type="html">&lt;p&gt;Martyl: /* Tips */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What's Here, Why You Should Care ==&lt;br /&gt;
&lt;br /&gt;
A collection of tips useful to those doing embedded development.  Accumulated over several years of doing project work, helping other engineers, untangling projects for customers and feedback from several CELF presentations related to this topic.&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
&lt;br /&gt;
=== View Compilation Plan  ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gcc -### &amp;lt;the rest of your command line goes here&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The GCC you run is a driver program for a bunch of other programs.  With this parameter, gcc will produce (but not actually execute) the commands it would have used to accomplish the task you asked it to do.  This way, you can see the gory details of what's going on behind the scenes.  What library is being used?  What is -mcpu set to?  It's all there.  &lt;br /&gt;
&lt;br /&gt;
You can pipe this output to a file and execute that to compile a program, making it easy to experiment with tweaks to the linker or assembler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Reading specs from /opt/timesys/toolchains/ppc7xx-linux/lib/gcc/powerpc-linux/3.4.1/specs&lt;br /&gt;
Configured with: ../configure --prefix=/opt/timesys/toolchains/ppc7xx-linux --mandir=/opt/timesys/toolchains/ppc7xx-linux/share/man --infodir=/opt/timesys/toolchains/ppc7xx-linux/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-languages=c,c++ --with-sysroot=/here/workdir/i386-x-ppc7xx/deleteme --disable-libgcj --build=i686-timesys-linux --host=i686-timesys-linux --target=powerpc-linux --program-prefix=ppc7xx-linux-&lt;br /&gt;
Thread model: posix&lt;br /&gt;
gcc version 3.4.1 20040714 (TimeSys 3.4.1-7)&lt;br /&gt;
 /opt/timesys/toolchains/ppc7xx-linux/libexec/gcc/powerpc-linux/3.4.1/cc1 -quiet -v -D__unix__ -D__gnu_linux__ -D__linux__ -Dunix -D__unix -Dlinux -D__linux -Asystem=linux -Asystem=unix -Asystem=posix -I/opt/timesys/toolchains/ppc7xx-linux/powerpc-linux/include/nptl file.c -quiet -dumpbase file.c -auxbase file -version -o /tmp/ccShiHn4.s&lt;br /&gt;
ignoring nonexistent directory &amp;quot;/here/workdir/i386-x-ppc7xx/deleteme/usr/local/include&amp;quot;&lt;br /&gt;
ignoring nonexistent directory &amp;quot;/here/workdir/i386-x-ppc7xx/deleteme/usr/include&amp;quot;&lt;br /&gt;
#include &amp;quot;...&amp;quot; search starts here:&lt;br /&gt;
#include &amp;lt;...&amp;gt; search starts here:&lt;br /&gt;
 /opt/timesys/toolchains/ppc7xx-linux/powerpc-linux/include/nptl&lt;br /&gt;
 /opt/timesys/toolchains/ppc7xx-linux/lib/gcc/powerpc-linux/3.4.1/include&lt;br /&gt;
 /opt/timesys/toolchains/ppc7xx-linux/lib/gcc/powerpc-linux/3.4.1/../../../../powerpc-linux/include&lt;br /&gt;
End of search list.&lt;br /&gt;
GNU C version 3.4.1 20040714 (TimeSys 3.4.1-7) (powerpc-linux)&lt;br /&gt;
 compiled by GNU C version 3.2.2 20030222 (Red Hat Linux 3.2.2-5).&lt;br /&gt;
GGC heuristics: --param ggc-min-expand=47 --param ggc-min-heapsize=32138&lt;br /&gt;
 /opt/timesys/toolchains/ppc7xx-linux/lib/gcc/powerpc-linux/3.4.1/../../../../powerpc-linux/bin/as -mppc -many -V -Qy -o /tmp/ccWeV3a3.o /tmp/ccShiHn4.s&lt;br /&gt;
GNU assembler version 2.15.90.0.3 (powerpc-linux) using BFD version 2.15.90.0.3 20040415&lt;br /&gt;
 /opt/timesys/toolchains/ppc7xx-linux/libexec/gcc/powerpc-linux/3.4.1/collect2 --eh-frame-hdr -V -Qy -L/opt/timesys/toolchains/ppc7xx-linux/powerpc-linux/lib/nptl --rpath-link /opt/timesys/toolchains/ppc7xx-linux/powerpc-linux/lib/tls -m elf32ppclinux -dynamic-linker /lib/ld.so.1 -o file /opt/timesys/toolchains/ppc7xx-linux/lib/gcc/powerpc-linux/3.4.1/../../../../powerpc-linux/lib/crt1.o /opt/timesys/toolchains/ppc7xx-linux/lib/gcc/powerpc-linux/3.4.1/../../../../powerpc-linux/lib/crti.o /opt/timesys/toolchains/ppc7xx-linux/lib/gcc/powerpc-linux/3.4.1/crtbegin.o -L/opt/timesys/toolchains/ppc7xx-linux/lib/gcc/powerpc-linux/3.4.1 -L/opt/timesys/toolchains/ppc7xx-linux/lib/gcc/powerpc-linux/3.4.1/../../../../powerpc-linux/lib /tmp/ccWeV3a3.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /opt/timesys/toolchains/ppc7xx-linux/lib/gcc/powerpc-linux/3.4.1/crtsavres.o /opt/timesys/toolchains/ppc7xx-linux/lib/gcc/powerpc-linux/3.4.1/crtend.o /opt/timesys/toolchains/ppc7xx-linux/lib/gcc/powerpc-linux/3.4.1/../../../../powerpc-linux/lib/crtn.o&lt;br /&gt;
GNU ld version 2.15.90.0.3 20040415&lt;br /&gt;
  Supported emulations:&lt;br /&gt;
   elf32ppclinux&lt;br /&gt;
   elf32ppc&lt;br /&gt;
   elf32ppcsim&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pre-Process, Retain Comments ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gcc -C -E &amp;lt;file-name.c&amp;gt; -o file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some engineers love to do coding in macros.  The rest of us would like to break their fingers.  This command will run the file through the pre-processor, expanding all macros, but retaining all comments.  Stick a comment like &amp;quot;LOOK HERE&amp;quot; and search for that so you reduce the amount of time you spend looking for the offending code.&lt;br /&gt;
&lt;br /&gt;
=== See what Files the Linker is Using ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gcc -Wl,-t &amp;lt;parameters&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Displays what files the linker opens in what order. When looking in archive files, the archive file is displayed in para theses, followed by the file in the archive.  Very handy when working through a legacy project that depends on files linking in a certain order that suddenly breaks because of a small (probably viewed as not noteworthy) change in a makefile somewhere.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/bin/ld: mode elf_i386&lt;br /&gt;
/usr/lib/gcc-lib/i386-redhat-linux/3.3.3/../../../crt1.o&lt;br /&gt;
/usr/lib/gcc-lib/i386-redhat-linux/3.3.3/../../../crti.o&lt;br /&gt;
/usr/lib/gcc-lib/i386-redhat-linux/3.3.3/crtbegin.o&lt;br /&gt;
/tmp/cc37FxnS.o&lt;br /&gt;
-lgcc_s (/usr/lib/gcc-lib/i386-redhat-linux/3.3.3/libgcc_s.so)&lt;br /&gt;
/lib/libc.so.6&lt;br /&gt;
(/usr/lib/libc_nonshared.a)elf-init.oS&lt;br /&gt;
-lgcc_s (/usr/lib/gcc-lib/i386-redhat-linux/3.3.3/libgcc_s.so)&lt;br /&gt;
/usr/lib/gcc-lib/i386-redhat-linux/3.3.3/crtend.o&lt;br /&gt;
/usr/lib/gcc-lib/i386-redhat-linux/3.3.3/../../../crtn.o&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Print Pre-defined Macros ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gcc -E -dM - &amp;lt; /dev/null | cut -c 9- | sort&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Very handy when porting code.  Lets you know if your target processor has some missing defines or if something is different (line __INT_MAX__) that can have interesting effects on your project.  Diff the output from the old to the new compiler so you can easily see the differences, makes it easy to spot problems before getting started. &lt;br /&gt;
&lt;br /&gt;
Sample output, from a compiler targeting an ARM processor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
__APCS_32__ 1&lt;br /&gt;
__arm__ 1&lt;br /&gt;
__ARM_ARCH_4T__ 1&lt;br /&gt;
__ARMEL__ 1&lt;br /&gt;
__CHAR_BIT__ 8&lt;br /&gt;
__CHAR_UNSIGNED__ 1&lt;br /&gt;
__DBL_DENORM_MIN__ 4.9406564584124654e-324&lt;br /&gt;
__DBL_DIG__ 15&lt;br /&gt;
__DBL_EPSILON__ 2.2204460492503131e-16&lt;br /&gt;
__DBL_HAS_DENORM__ 1&lt;br /&gt;
__DBL_HAS_INFINITY__ 1&lt;br /&gt;
__DBL_HAS_QUIET_NAN__ 1&lt;br /&gt;
__DBL_MANT_DIG__ 53&lt;br /&gt;
__DBL_MAX_10_EXP__ 308&lt;br /&gt;
__DBL_MAX__ 1.7976931348623157e+308&lt;br /&gt;
__DBL_MAX_EXP__ 1024&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mixed Assembler and Source Output ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gcc -g somefile.c -o somefile&lt;br /&gt;
objdump -S somefile &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prints out each line in the program and the corresponding assembly code.  Very handy when you're trying to see that the processor is generating the correct code, with the instructions you're expecting.  You can also see the effects of optimization, but would recommend doing this for a small amount of code because when the optimization level is high, there's a much lower relationship between line of code and generated assembler.&lt;br /&gt;
&lt;br /&gt;
Here's an example of what objdump produces for a few lines of code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  gpvSharedMemory = shmat(hSharedMemory, NULL, 0);&lt;br /&gt;
10000958:       80 7f 00 10     lwz     r3,16(r31)&lt;br /&gt;
1000095c:       38 80 00 00     li      r4,0&lt;br /&gt;
10000960:       38 a0 00 00     li      r5,0&lt;br /&gt;
10000964:       48 01 09 31     bl      10011294 &amp;lt;shmat@plt&amp;gt;&lt;br /&gt;
10000968:       7c 60 1b 78     mr      r0,r3&lt;br /&gt;
1000096c:       3d 20 10 01     lis     r9,4097&lt;br /&gt;
10000970:       90 09 11 d0     stw     r0,4560(r9)&lt;br /&gt;
  if (errno != 0) {&lt;br /&gt;
10000974:       48 01 08 d1     bl      10011244 &amp;lt;__errno_location@plt&amp;gt;&lt;br /&gt;
10000978:       7c 60 1b 78     mr      r0,r3&lt;br /&gt;
1000097c:       7c 09 03 78     mr      r9,r0&lt;br /&gt;
10000980:       80 09 00 00     lwz     r0,0(r9)&lt;br /&gt;
10000984:       2f 80 00 00     cmpwi   cr7,r0,0&lt;br /&gt;
10000988:       41 9e 00 50     beq-    cr7,100009d8 &amp;lt;main+0x10c&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Specify Language ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gcc -x c a-c-source-file.with-a-non-standard-extension -o test.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Great for legacy projects where where the file extensions don't match with GCC's expectations, while less of a problem since many projects got their start with GCC, this still is an issue with long-running projects that years back, used some other compiler.  This stays in effect for the following file on the command line.  &lt;br /&gt;
&lt;br /&gt;
=== List Include File Dependencies ===&lt;br /&gt;
&lt;br /&gt;
There's a whole family of things around -M.  These produce a rule that could be used in a make file, with the included files as dependencies.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gcc -M &amp;lt;file name&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This shows you all includes, even those on the system path.  Useful if you're doing porting work or validating if your compiler is working as expected and getting the files from the right place.  You'll see something like this for a basic hello world program&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
hello.o: hello.c /usr/include/stdio.h /usr/include/features.h \&lt;br /&gt;
  /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \&lt;br /&gt;
  /usr/lib/gcc-lib/i386-redhat-linux/3.3.3/include/stddef.h \&lt;br /&gt;
  /usr/include/bits/types.h /usr/include/bits/wordsize.h \&lt;br /&gt;
  /usr/include/bits/typesizes.h /usr/include/libio.h \&lt;br /&gt;
  /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \&lt;br /&gt;
  /usr/include/gconv.h \&lt;br /&gt;
  /usr/lib/gcc-lib/i386-redhat-linux/3.3.3/include/stdarg.h \&lt;br /&gt;
  /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gcc -MM &amp;lt;file name&amp;gt;  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Like -M, but no system files.  Great to see if your project is configured and working as expected.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gcc -M -MG &amp;lt;file name&amp;gt;  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The prior -M and -MM commands will stop if header files can be located.  The parameter -MG will just produce the dependency list with the missing file.  Engineers that have projects that generate header files as part of the build find -MM very handy.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gcc -M -MT '&amp;lt;target&amp;gt;' &amp;lt;file name&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By default, the target will be the &amp;lt;file name&amp;gt;.o  This command will make the default the value of &amp;lt;target&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If the command was&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gcc -M -MT '$(target)' hello.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You would see &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(target): hello.c &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Symbol Trace ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gcc -Wl,-y,printf hello.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is very handy when you want to understand the linker is finding a definition of a symbol.  Some projects have name collisions or link order dependencies.  This lets you see precisely what the linker is doing.&lt;br /&gt;
&lt;br /&gt;
Given a hello world program, you would see output like &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/tmp/ccwZx5UV.o: reference to printf&lt;br /&gt;
/lib/libc.so.6: definition of printf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The reference is in a temporary file created during the compilation process. If you were linking several object files together explicitly, you would see the name of the object file where printf was referenced.&lt;br /&gt;
&lt;br /&gt;
=== Saving temporary files ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gcc -save-temps hello.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The compilers temporary files are saved.  This is often invaluable dealing with complicated makefiles to peek at the preprocessed output without having to figure out how to do a -E option by hand.&lt;/div&gt;</summary>
		<author><name>Martyl</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Talk:GCC_Tips</id>
		<title>Talk:GCC Tips</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Talk:GCC_Tips"/>
				<updated>2008-07-26T15:26:42Z</updated>
		
		<summary type="html">&lt;p&gt;Martyl: gcc -### does different things on 4.1.3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I don't see the same output with gcc -###.&lt;br /&gt;
&lt;br /&gt;
Each argument is quoted. It was introduced in 3.x.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
: leisner@thinkpad 11:19:21;gcc -### foo.c&lt;br /&gt;
Using built-in specs.&lt;br /&gt;
Target: i486-linux-gnu&lt;br /&gt;
Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.1.3 --program-suffix=-4.1 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-mpfr --enable-checking=release i486-linux-gnu&lt;br /&gt;
Thread model: posix&lt;br /&gt;
gcc version 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)&lt;br /&gt;
 &amp;quot;/usr/lib/gcc/i486-linux-gnu/4.1.3/cc1&amp;quot; &amp;quot;-quiet&amp;quot; &amp;quot;foo.c&amp;quot; &amp;quot;-quiet&amp;quot; &amp;quot;-dumpbase&amp;quot; &amp;quot;foo.c&amp;quot; &amp;quot;-mtune=generic&amp;quot; &amp;quot;-auxbase&amp;quot; &amp;quot;foo&amp;quot; &amp;quot;-fstack-protector&amp;quot; &amp;quot;-fstack-protector&amp;quot; &amp;quot;-o&amp;quot; &amp;quot;/tmp/ccHgtcb6.s&amp;quot;&lt;br /&gt;
 &amp;quot;as&amp;quot; &amp;quot;--traditional-format&amp;quot; &amp;quot;-Qy&amp;quot; &amp;quot;-o&amp;quot; &amp;quot;/tmp/cc60Wmj2.o&amp;quot; &amp;quot;/tmp/ccHgtcb6.s&amp;quot;&lt;br /&gt;
 &amp;quot;/usr/lib/gcc/i486-linux-gnu/4.1.3/collect2&amp;quot; &amp;quot;--eh-frame-hdr&amp;quot; &amp;quot;-m&amp;quot; &amp;quot;elf_i386&amp;quot; &amp;quot;--hash-style=both&amp;quot; &amp;quot;-dynamic-linker&amp;quot; &amp;quot;/lib/ld-linux.so.2&amp;quot; &amp;quot;/usr/lib/gcc/i486-linux-gnu/4.1.3/../../../../lib/crt1.o&amp;quot; &amp;quot;/usr/lib/gcc/i486-linux-gnu/4.1.3/../../../../lib/crti.o&amp;quot; &amp;quot;/usr/lib/gcc/i486-linux-gnu/4.1.3/crtbegin.o&amp;quot; &amp;quot;-L/usr/X11R6/lib/../lib&amp;quot; &amp;quot;-L/usr/lib/gcc/i486-linux-gnu/4.1.3&amp;quot; &amp;quot;-L/usr/lib/gcc/i486-linux-gnu/4.1.3&amp;quot; &amp;quot;-L/usr/lib/gcc/i486-linux-gnu/4.1.3/../../../../lib&amp;quot; &amp;quot;-L/lib/../lib&amp;quot; &amp;quot;-L/usr/lib/../lib&amp;quot; &amp;quot;/tmp/cc60Wmj2.o&amp;quot; &amp;quot;-lgcc&amp;quot; &amp;quot;--as-needed&amp;quot; &amp;quot;-lgcc_s&amp;quot; &amp;quot;--no-as-needed&amp;quot; &amp;quot;-lc&amp;quot; &amp;quot;-lgcc&amp;quot; &amp;quot;--as-needed&amp;quot; &amp;quot;-lgcc_s&amp;quot; &amp;quot;--no-as-needed&amp;quot; &amp;quot;/usr/lib/gcc/i486-linux-gnu/4.1.3/crtend.o&amp;quot; &amp;quot;/usr/lib/gcc/i486-linux-gnu/4.1.3/../../../../lib/crtn.o&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I've never used this -- but always used gcc -v to see the passes&lt;/div&gt;</summary>
		<author><name>Martyl</name></author>	</entry>

	</feed>