digitalmars.D - Linking with DMD
- Anonymous (54/54) Jun 21 2012 So I really think improvements could be made on how you link your
- Walter Bright (4/10) Jun 21 2012 main() cannot function as the start address of a program. Things must be...
- Walter Bright (2/4) Jun 21 2012 DLL files contain insufficient information to link successfully to them.
- Anonymous (2/8) Jun 21 2012 GCC (MinGW) is able to do this...
- Walter Bright (5/12) Jun 21 2012 For example, many names in Windows DLLs are:
- Anonymous (3/19) Jun 21 2012 But you declare it in your code like this:
- Timon Gehr (3/33) Jun 21 2012 If linking in the runtime is disabled explicitly, linker errors are to
So I really think improvements could be made on how you link your
code when compiling it with DMD...
I want to have the complete control over which libraries i link
my program to...
Actually, i'm not yet planning on using either phobos or tango.
(I would maybe use one of those when i notice, that one of those
libraries offers something that i would like to use, because
otherwise my executable file would unnecessarily blow up in size,
right?)
So I ended up downloading the zip-archive of DMD and extracting
only the parts i need:
- Windows DMD without any lib files (only the contents of the
\windows\bin\ folder)
- druntime (object.d, ...)
The folder which was the \windows\bin\ folder is now my main DMD
folder
I changed the sc.ini file so that it now only
- looks for lib files in an empty "lib" folder i created inside
this main DMD folder
- imports the druntime source files (i exported everything inside
/src/druntime/src/ into an "import" folder inside the main DMD
folder and renamed object_.d to object.d)
Now when i try to compile a file with only
- a module name declaration
- and an empty void main(){} function (without extern linking)
it says:
OPTLINK : Warning 23: No Stack
Error 42: Symbol Undefined _main
Error 42: Symbol Undefined __acrtused_con
OPTLINK : Warning 134: No Start Address
I would really like seeing this working...
Also i would like to be able to link to DLL files directly
without having to create or find matching lib files...
So that i could write on the command line something like:
dmd mysource.d C:\Windows\system32\kernel32.dll
C:\WINXP\system32\Winmm.dll C:\WINXP\system32\Gdi32.dll
And in my program i declare the functions i want to use with
extern linkage without body.
Is this somehow possible? I really like many things D offers like
nested functions, closures, modules, how it doesn't pollute your
namespace because of the possibilities you have when importing
other modules...
But i think the linking process still has to be cut down and made
simple and straightforward.
It works when I copy all the lib files from \windows\lib into my
lib folder... so i guess it links to lib files which I haven't
even specified on the command line.
This should all be made much more straightforward... So that I
can link only to the libraries i want to... And that I can link
to them by simply specifying the DLL file... not having to find a
matching lib file on the internet...
Because otherwise i don't think D is much better than a bloated
java virtual machine or stuff like that...
So, I'm really curious about the opinions on that
Jun 21 2012
On 6/21/2012 10:48 AM, Anonymous wrote:it says: OPTLINK : Warning 23: No Stack Error 42: Symbol Undefined _main Error 42: Symbol Undefined __acrtused_con OPTLINK : Warning 134: No Start Address I would really like seeing this working...main() cannot function as the start address of a program. Things must be set up first, and __acrtused_con pulls in the code that does that. But that code must exist in a library.
Jun 21 2012
On 6/21/2012 10:48 AM, Anonymous wrote:And that I can link to them by simply specifying the DLL file... not having to find a matching lib file on the internet...DLL files contain insufficient information to link successfully to them.
Jun 21 2012
On Thursday, 21 June 2012 at 18:06:12 UTC, Walter Bright wrote:On 6/21/2012 10:48 AM, Anonymous wrote:GCC (MinGW) is able to do this...And that I can link to them by simply specifying the DLL file... not having to find a matching lib file on the internet...DLL files contain insufficient information to link successfully to them.
Jun 21 2012
On 6/21/2012 11:14 AM, Anonymous wrote:On Thursday, 21 June 2012 at 18:06:12 UTC, Walter Bright wrote:For example, many names in Windows DLLs are: _foo 16 which means there are 16 bytes worth of parameters. However, there's zero information on how many parameters there are or what their types are.On 6/21/2012 10:48 AM, Anonymous wrote:GCC (MinGW) is able to do this...And that I can link to them by simply specifying the DLL file... not having to find a matching lib file on the internet...DLL files contain insufficient information to link successfully to them.
Jun 21 2012
On Thursday, 21 June 2012 at 19:42:46 UTC, Walter Bright wrote:On 6/21/2012 11:14 AM, Anonymous wrote:But you declare it in your code like this: extern (Windows) int foo(int a, void* b, void* c, uint d);On Thursday, 21 June 2012 at 18:06:12 UTC, Walter Bright wrote:For example, many names in Windows DLLs are: _foo 16 which means there are 16 bytes worth of parameters. However, there's zero information on how many parameters there are or what their types are.On 6/21/2012 10:48 AM, Anonymous wrote:GCC (MinGW) is able to do this...And that I can link to them by simply specifying the DLL file... not having to find a matching lib file on the internet...DLL files contain insufficient information to link successfully to them.
Jun 21 2012
On 06/21/2012 07:48 PM, Anonymous wrote:
So I really think improvements could be made on how you link your code
when compiling it with DMD...
I want to have the complete control over which libraries i link my
program to...
Actually, i'm not yet planning on using either phobos or tango. (I would
maybe use one of those when i notice, that one of those libraries offers
something that i would like to use, because otherwise my executable file
would unnecessarily blow up in size, right?)
So I ended up downloading the zip-archive of DMD and extracting only the
parts i need:
- Windows DMD without any lib files (only the contents of the
\windows\bin\ folder)
- druntime (object.d, ...)
The folder which was the \windows\bin\ folder is now my main DMD folder
I changed the sc.ini file so that it now only
- looks for lib files in an empty "lib" folder i created inside this
main DMD folder
- imports the druntime source files (i exported everything inside
/src/druntime/src/ into an "import" folder inside the main DMD folder
and renamed object_.d to object.d)
Now when i try to compile a file with only
- a module name declaration
- and an empty void main(){} function (without extern linking)
it says:
OPTLINK : Warning 23: No Stack
Error 42: Symbol Undefined _main
Error 42: Symbol Undefined __acrtused_con
OPTLINK : Warning 134: No Start Address
I would really like seeing this working...
...
If linking in the runtime is disabled explicitly, linker errors are to
be expected.
Jun 21 2012









Walter Bright <newshound2 digitalmars.com> 