digitalmars.D - Completely Remove C Runtime with DMD for win32
- tcb (12/12) Jul 15 2018 I've been trying to compile a trivial program (extern C int
- kinke (5/7) Jul 15 2018 This works for me:
- Walter Bright (5/7) Jul 15 2018 Declaring a C function called "main" causes the C runtime library to be ...
- tcb (1/1) Jul 15 2018 Thank you both, that clarifies a lot!
- Walter Bright (6/7) Jul 15 2018 You can set the start address with the DMC C compiler using a #pragma:
- Jonathan Marler (8/20) Jul 16 2018 I recently created an issue that included an example that allows
I've been trying to compile a trivial program (extern C int main() {return 0;}) without linking parts of the C runtime with no success. I compile with dmd -debuglib= -defaultlib= -v -L=/INFORMATION -betterC but optlink shows a lot of things from snn.lib being pulled in and the resultant executable is about 12kb. I also replaced object.d with an empty module. If I pass /nodefaultlib to the linker I get warning 23: no stack and __acrtused_con is undefined so the linker fails with no start address. Is it possible to completely remove the C runtime on windows, and if so how? Sorry for the sloppily formatted post.
Jul 15 2018
On Sunday, 15 July 2018 at 20:29:29 UTC, tcb wrote:Is it possible to completely remove the C runtime on windows, and if so how?This works for me: extern(C) int mainCRTStartup() { return 0; } dmd -m32mscoff -betterC -L/subsystem:CONSOLE main.d => 1.5 kB .exe.
Jul 15 2018
On 7/15/2018 1:29 PM, tcb wrote:I've been trying to compile a trivial program (extern C int main() {return 0;}) without linking parts of the C runtime with no success.Declaring a C function called "main" causes the C runtime library to be pulled in. After all, main() is not the program entry point, as main() requires a number of things to be set up first (such as argc and argv). Call the function something else, and compile with -betterC.
Jul 15 2018
On 7/15/2018 2:46 PM, tcb wrote:Thank you both, that clarifies a lot!You can set the start address with the DMC C compiler using a #pragma: https://www.digitalmars.com/ctg/pragmas.html#startaddress but currently that isn't directly settable with the DMD compiler. You can see how it is used in this file of the DMC runtime library: https://github.com/DigitalMars/dmc/blob/master/src/WIN32/constart.c#L88
Jul 15 2018
On Sunday, 15 July 2018 at 20:29:29 UTC, tcb wrote:I've been trying to compile a trivial program (extern C int main() {return 0;}) without linking parts of the C runtime with no success. I compile with dmd -debuglib= -defaultlib= -v -L=/INFORMATION -betterC but optlink shows a lot of things from snn.lib being pulled in and the resultant executable is about 12kb. I also replaced object.d with an empty module. If I pass /nodefaultlib to the linker I get warning 23: no stack and __acrtused_con is undefined so the linker fails with no start address. Is it possible to completely remove the C runtime on windows, and if so how? Sorry for the sloppily formatted post.I recently created an issue that included an example that allows you to compile a Hello World program on linux x64 without the c standard library, druntime or phobos. https://issues.dlang.org/show_bug.cgi?id=19078 You can modify it to run on windows as well. I'm not sure if the _start assembly implementation would be the same on windows. Try it out and let me know how it works.
Jul 16 2018