linking C++/D static library - what is "crt0.o"?

bitwise via digitalmars-d-ldc digitalmars-d-ldc at
Sun Dec 28 14:08:15 PST 2014

Hi, just wondering if someone can help me out.
I'm trying to mix C++ and D code using ldc2 and clang++.

I'm using ldc 0.14.0, and the version of clang which came with 
Xcode(Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 

I have two files:

module main;

import std.stdio;
import std.conv;

extern(C) int add(int a, int b);

void main() {
	int ret = add(1, 2);
	writeln("1 + 2 = " ~ to!string(ret));

extern "C" int add(int a, int b) {
	return a + b;

When I compile the above two files as executable, everything 
compiles and runs fine:

> ldc2 -c -od/.../test_exec/obj/Debug main.d
> clang++ -c -working-directory /.../test_exec/obj/Debug 
> ../../native.cpp
> clang++  -working-directory /.../test_exec 
> /.../test_exec/obj/Debug/main.o 
> /.../test_exec/obj/Debug/native.o /.../libdruntime-ldc.a 
> /.../libphobos2-ldc.a -obin/Debug/test_exec

the resulting executable outputs: "1 + 2 = 3"

However, when I try to make a static library with the above 
files, it fails:

> ldc2 -c -od/.../test_lib/obj/Debug main.d
> clang++ -c -working-directory /.../test_lib/obj/Debug 
> ../../native.cpp
> clang++ -static -working-directory /.../test_lib 
> /.../test_lib/obj/Debug/main.o /.../test_lib/obj/Debug/native.o 
> -obin/Debug/libtest_lib.a

> ld: library not found for -lcrt0.o
> clang: error: linker command failed with exit code 1 (use -v to 
> see invocation)

So what is "-lcrt0.o" and why is clang trying to automatically 
add it to my static library?

More information about the digitalmars-d-ldc mailing list