www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - optlink options to reduce file size?

reply simendsjo <simendsjo gmail.com> writes:
A simple hello world like dfl application takes 1.2mb. Upx does a great 
job packing this to 200k, but I wonder if there is a way to make optlink 
generate smaller executables?

I couldn't find a way to get help on the numerous options in optlink, 
and the help page at digitalmars doesn't list them either.
Jul 27 2011
next sibling parent reply simendsjo <simendsjo gmail.com> writes:
On 27.07.2011 13:21, simendsjo wrote:
 A simple hello world like dfl application takes 1.2mb. Upx does a great
 job packing this to 200k, but I wonder if there is a way to make optlink
 generate smaller executables?

 I couldn't find a way to get help on the numerous options in optlink,
 and the help page at digitalmars doesn't list them either.

Nevermind. I found the switches here: http://www.digitalmars.com/ctg/ctgLinkSwitches.html
Jul 27 2011
parent reply Stephan <spam extrawurst.org> writes:
On 27.07.2011 13:26, simendsjo wrote:
 On 27.07.2011 13:21, simendsjo wrote:
 A simple hello world like dfl application takes 1.2mb. Upx does a great
 job packing this to 200k, but I wonder if there is a way to make optlink
 generate smaller executables?

 I couldn't find a way to get help on the numerous options in optlink,
 and the help page at digitalmars doesn't list them either.

Nevermind. I found the switches here: http://www.digitalmars.com/ctg/ctgLinkSwitches.html

So what switched did you use to make it link smaller ?
Jul 27 2011
parent simendsjo <simendsjo gmail.com> writes:
On 27.07.2011 13:42, Stephan wrote:
 On 27.07.2011 13:26, simendsjo wrote:
 On 27.07.2011 13:21, simendsjo wrote:
 A simple hello world like dfl application takes 1.2mb. Upx does a great
 job packing this to 200k, but I wonder if there is a way to make optlink
 generate smaller executables?

 I couldn't find a way to get help on the numerous options in optlink,
 and the help page at digitalmars doesn't list them either.

Nevermind. I found the switches here: http://www.digitalmars.com/ctg/ctgLinkSwitches.html

So what switched did you use to make it link smaller ?

I haven't gone through the switches yet. /EXEPACK looks interesting.
Jul 27 2011
prev sibling next sibling parent reply Dmitry Olshansky <dmitry.olsh gmail.com> writes:
On 27.07.2011 15:21, simendsjo wrote:
 A simple hello world like dfl application takes 1.2mb. Upx does a 
 great job packing this to 200k, but I wonder if there is a way to make 
 optlink generate smaller executables?

 I couldn't find a way to get help on the numerous options in optlink, 
 and the help page at digitalmars doesn't list them either.

if you don't like packing you may try it: ftp://ftp.styx.cabel.net/pub/UniLink/ulnb0319.zip <ftp://ftp.styx.cabel.net/pub/UniLink/> just make sure you configured it correctly (should be straightforward, there are examples) -- Dmitry Olshansky
Jul 27 2011
next sibling parent Dmitry Olshansky <dmitry.olsh gmail.com> writes:
On 27.07.2011 18:05, Andrej Mitrovic wrote:
 I've found it interesting how sometimes (not dfl-specific) the first
 compiled executable is over a meg in size, but as I add a couple of
 hunderd lines of code the executable size shrinks. I guess some kind
 of optimization takes place there..

It's possible in case if, for instance, your first version uses more different functions from lib then the second one, in effect linker could pull in less object files from library. -- Dmitry Olshansky
Jul 27 2011
prev sibling next sibling parent reply simendsjo <simendsjo gmail.com> writes:
On 27.07.2011 15:45, Dmitry Olshansky wrote:
 On 27.07.2011 15:21, simendsjo wrote:
 A simple hello world like dfl application takes 1.2mb. Upx does a
 great job packing this to 200k, but I wonder if there is a way to make
 optlink generate smaller executables?

 I couldn't find a way to get help on the numerous options in optlink,
 and the help page at digitalmars doesn't list them either.

if you don't like packing you may try it: ftp://ftp.styx.cabel.net/pub/UniLink/ulnb0319.zip <ftp://ftp.styx.cabel.net/pub/UniLink/> just make sure you configured it correctly (should be straightforward, there are examples)

Thanks. Any idea if unilink works with libraries linked with optlink? I get "Error: Invalid library file (3) 'some optlink.lib'"
Jul 27 2011
parent reply Dmitry Olshansky <dmitry.olsh gmail.com> writes:
On 27.07.2011 21:16, simendsjo wrote:
 On 27.07.2011 15:45, Dmitry Olshansky wrote:
 On 27.07.2011 15:21, simendsjo wrote:
 A simple hello world like dfl application takes 1.2mb. Upx does a
 great job packing this to 200k, but I wonder if there is a way to make
 optlink generate smaller executables?

 I couldn't find a way to get help on the numerous options in optlink,
 and the help page at digitalmars doesn't list them either.

if you don't like packing you may try it: ftp://ftp.styx.cabel.net/pub/UniLink/ulnb0319.zip <ftp://ftp.styx.cabel.net/pub/UniLink/> just make sure you configured it correctly (should be straightforward, there are examples)

Thanks. Any idea if unilink works with libraries linked with optlink? I get "Error: Invalid library file (3) 'some optlink.lib'"

For what it's worth any D2 app uses phobos.lib and obviously that worked. Not that it was linked, library is a sort of a package with obj files. Also check if this is in fact library it might very well be renamed executable in which case 2 first bytes of file are 'MZ'. It should work with both OMF (DMC, old MS VC++ etc.) and COFF (MinGW, modern MS C++ etc.) libraries. -- Dmitry Olshansky
Jul 27 2011
parent reply simendsjo <simendsjo gmail.com> writes:
On 27.07.2011 23:00, Dmitry Olshansky wrote:
 On 27.07.2011 21:16, simendsjo wrote:
 On 27.07.2011 15:45, Dmitry Olshansky wrote:
 On 27.07.2011 15:21, simendsjo wrote:
 A simple hello world like dfl application takes 1.2mb. Upx does a
 great job packing this to 200k, but I wonder if there is a way to make
 optlink generate smaller executables?

 I couldn't find a way to get help on the numerous options in optlink,
 and the help page at digitalmars doesn't list them either.

if you don't like packing you may try it: ftp://ftp.styx.cabel.net/pub/UniLink/ulnb0319.zip <ftp://ftp.styx.cabel.net/pub/UniLink/> just make sure you configured it correctly (should be straightforward, there are examples)

Thanks. Any idea if unilink works with libraries linked with optlink? I get "Error: Invalid library file (3) 'some optlink.lib'"

For what it's worth any D2 app uses phobos.lib and obviously that worked. Not that it was linked, library is a sort of a package with obj files. Also check if this is in fact library it might very well be renamed executable in which case 2 first bytes of file are 'MZ'. It should work with both OMF (DMC, old MS VC++ etc.) and COFF (MinGW, modern MS C++ etc.) libraries.

Tried a minimal sample using only phobos. Gave me another error: Error: Unresolved external '__acrtused_con' referenced from 't.obj' I downloaded the entire dm compiler and added snn.lib which solved the problem. I'm still getting linker errors on the old file though.
 dmd t3 dfl.lib

 ulink.exe -Go -Tpe t3.obj,t3.exe,,dfl.lib

Error: Invalid library file (3) 'c:\d\ext\dwin\lib\dfl.lib'
Jul 27 2011
parent reply Dmitry Olshansky <dmitry.olsh gmail.com> writes:
On 28.07.2011 2:03, simendsjo wrote:
 On 27.07.2011 23:00, Dmitry Olshansky wrote:
 On 27.07.2011 21:16, simendsjo wrote:
 On 27.07.2011 15:45, Dmitry Olshansky wrote:
 On 27.07.2011 15:21, simendsjo wrote:
 A simple hello world like dfl application takes 1.2mb. Upx does a
 great job packing this to 200k, but I wonder if there is a way to 
 make
 optlink generate smaller executables?

 I couldn't find a way to get help on the numerous options in optlink,
 and the help page at digitalmars doesn't list them either.

unilink. So if you don't like packing you may try it: ftp://ftp.styx.cabel.net/pub/UniLink/ulnb0319.zip <ftp://ftp.styx.cabel.net/pub/UniLink/> just make sure you configured it correctly (should be straightforward, there are examples)

Thanks. Any idea if unilink works with libraries linked with optlink? I get "Error: Invalid library file (3) 'some optlink.lib'"

For what it's worth any D2 app uses phobos.lib and obviously that worked. Not that it was linked, library is a sort of a package with obj files. Also check if this is in fact library it might very well be renamed executable in which case 2 first bytes of file are 'MZ'. It should work with both OMF (DMC, old MS VC++ etc.) and COFF (MinGW, modern MS C++ etc.) libraries.

Tried a minimal sample using only phobos. Gave me another error: Error: Unresolved external '__acrtused_con' referenced from 't.obj' I downloaded the entire dm compiler and added snn.lib which solved the problem.

Yes, I should have mentioned it. Btw snn.lib lives in dmd2\windows\lib
 I'm still getting linker errors on the old file though.

 dmd t3 dfl.lib

 ulink.exe -Go -Tpe t3.obj,t3.exe,,dfl.lib

Error: Invalid library file (3) 'c:\d\ext\dwin\lib\dfl.lib'

weird, could be a bug in unilink. If you inclined that this is the case, send sample obj and lib to developers with some info ulink(at)styx.cabel.net Judging by my experience, sending source code in addition to obj files is appreciated. -- Dmitry Olshansky
Jul 27 2011
parent simendsjo <simendsjo gmail.com> writes:
On 28.07.2011 00:30, Dmitry Olshansky wrote:
 On 28.07.2011 2:03, simendsjo wrote:
 On 27.07.2011 23:00, Dmitry Olshansky wrote:
 On 27.07.2011 21:16, simendsjo wrote:
 On 27.07.2011 15:45, Dmitry Olshansky wrote:
 On 27.07.2011 15:21, simendsjo wrote:
 A simple hello world like dfl application takes 1.2mb. Upx does a
 great job packing this to 200k, but I wonder if there is a way to
 make
 optlink generate smaller executables?

 I couldn't find a way to get help on the numerous options in optlink,
 and the help page at digitalmars doesn't list them either.

unilink. So if you don't like packing you may try it: ftp://ftp.styx.cabel.net/pub/UniLink/ulnb0319.zip <ftp://ftp.styx.cabel.net/pub/UniLink/> just make sure you configured it correctly (should be straightforward, there are examples)

Thanks. Any idea if unilink works with libraries linked with optlink? I get "Error: Invalid library file (3) 'some optlink.lib'"

For what it's worth any D2 app uses phobos.lib and obviously that worked. Not that it was linked, library is a sort of a package with obj files. Also check if this is in fact library it might very well be renamed executable in which case 2 first bytes of file are 'MZ'. It should work with both OMF (DMC, old MS VC++ etc.) and COFF (MinGW, modern MS C++ etc.) libraries.

Tried a minimal sample using only phobos. Gave me another error: Error: Unresolved external '__acrtused_con' referenced from 't.obj' I downloaded the entire dm compiler and added snn.lib which solved the problem.

Yes, I should have mentioned it. Btw snn.lib lives in dmd2\windows\lib
 I'm still getting linker errors on the old file though.

 dmd t3 dfl.lib

 ulink.exe -Go -Tpe t3.obj,t3.exe,,dfl.lib

Error: Invalid library file (3) 'c:\d\ext\dwin\lib\dfl.lib'

weird, could be a bug in unilink. If you inclined that this is the case, send sample obj and lib to developers with some info ulink(at)styx.cabel.net Judging by my experience, sending source code in addition to obj files is appreciated.

Could be a bug, but it's most likely my bad as this is the first time I try unilink. Could someone else on windows verify that dfl cannot be linked with unilink?
Jul 27 2011
prev sibling parent reply q66 <quaker66 gmail.com> writes:
== Quote from Dmitry Olshansky (dmitry.olsh gmail.com)'s article
 On 27.07.2011 15:21, simendsjo wrote:
 A simple hello world like dfl application takes 1.2mb. Upx does a
 great job packing this to 200k, but I wonder if there is a way to make
 optlink generate smaller executables?

 I couldn't find a way to get help on the numerous options in optlink,
 and the help page at digitalmars doesn't list them either.

if you don't like packing you may try it: ftp://ftp.styx.cabel.net/pub/UniLink/ulnb0319.zip <ftp://ftp.styx.cabel.net/pub/UniLink/> just make sure you configured it correctly (should be straightforward, there are examples)

I don't work on Windows, but I've heard optlink generates debug info and unilink doesn't, so that might be the reason?
Jul 27 2011
parent reply simendsjo <simendsjo gmail.com> writes:
On 27.07.2011 20:59, q66 wrote:
 == Quote from Dmitry Olshansky (dmitry.olsh gmail.com)'s article
 On 27.07.2011 15:21, simendsjo wrote:
 A simple hello world like dfl application takes 1.2mb. Upx does a
 great job packing this to 200k, but I wonder if there is a way to make
 optlink generate smaller executables?

 I couldn't find a way to get help on the numerous options in optlink,
 and the help page at digitalmars doesn't list them either.

if you don't like packing you may try it: ftp://ftp.styx.cabel.net/pub/UniLink/ulnb0319.zip <ftp://ftp.styx.cabel.net/pub/UniLink/> just make sure you configured it correctly (should be straightforward, there are examples)

I don't work on Windows, but I've heard optlink generates debug info and unilink doesn't, so that might be the reason?

Even with -O -release? I added -L/NODEBUG and -L/DEBUG, but it seems dmd overrides this with it's switches.
Jul 27 2011
parent Dmitry Olshansky <dmitry.olsh gmail.com> writes:
On 27.07.2011 23:35, simendsjo wrote:
 On 27.07.2011 20:59, q66 wrote:
 == Quote from Dmitry Olshansky (dmitry.olsh gmail.com)'s article
 On 27.07.2011 15:21, simendsjo wrote:
 A simple hello world like dfl application takes 1.2mb. Upx does a
 great job packing this to 200k, but I wonder if there is a way to make
 optlink generate smaller executables?

 I couldn't find a way to get help on the numerous options in optlink,
 and the help page at digitalmars doesn't list them either.

if you don't like packing you may try it: ftp://ftp.styx.cabel.net/pub/UniLink/ulnb0319.zip <ftp://ftp.styx.cabel.net/pub/UniLink/> just make sure you configured it correctly (should be straightforward, there are examples)

I don't work on Windows, but I've heard optlink generates debug info and unilink doesn't, so that might be the reason?

Even with -O -release? I added -L/NODEBUG and -L/DEBUG, but it seems dmd overrides this with it's switches.

executable, IIRC last time I checked unilink converted CV debug info into TDS which is sadlly only recognized by Borland's tools. Note that with or without debug info it still links. -- Dmitry Olshansky
Jul 27 2011
prev sibling parent Andrej Mitrovic <andrej.mitrovich gmail.com> writes:
I've found it interesting how sometimes (not dfl-specific) the first
compiled executable is over a meg in size, but as I add a couple of
hunderd lines of code the executable size shrinks. I guess some kind
of optimization takes place there..
Jul 27 2011