Thread overview
Can you create a library with LDC and link to it with clang++?
Sep 23, 2020
Ruby The Roobster
Sep 23, 2020
Manu
Sep 24, 2020
12345swordy
Sep 24, 2020
Ruby The Roobster
Sep 24, 2020
Manu
September 23, 2020
Can you create a library(.lib) with ldc and port it to clang++?
e.g.

//test.d
module test;
import std.stdio;
void hi()
{
writeln("hello");
}

//test.cpp(links to test.lib which contains test.hi
#include <iostream>
extern "D" void hi();
void main() {
hi();
}
//Hopefully prints "hi"
September 24, 2020
On Thu, Sep 24, 2020 at 9:35 AM Ruby The Roobster via Digitalmars-d < digitalmars-d@puremagic.com> wrote:

> Can you create a library(.lib) with ldc and port it to clang++?
> e.g.
>
> //test.d
> module test;
> import std.stdio;
> void hi()
> {
> writeln("hello");
> }
>
> //test.cpp(links to test.lib which contains test.hi
> #include <iostream>
> extern "D" void hi();
> void main() {
> hi();
> }
> //Hopefully prints "hi"
>

Of course. This is critically important functionality for many users. Except, you should use `extern(C++)` in your D code, and no need to extern in your C++ code.


September 24, 2020
On Wednesday, 23 September 2020 at 23:45:38 UTC, Manu wrote:
> On Thu, Sep 24, 2020 at 9:35 AM Ruby The Roobster via Digitalmars-d < digitalmars-d@puremagic.com> wrote:
>
>> Can you create a library(.lib) with ldc and port it to clang++?
>> e.g.
>>
>> //test.d
>> module test;
>> import std.stdio;
>> void hi()
>> {
>> writeln("hello");
>> }
>>
>> //test.cpp(links to test.lib which contains test.hi
>> #include <iostream>
>> extern "D" void hi();
>> void main() {
>> hi();
>> }
>> //Hopefully prints "hi"
>>
>
> Of course. This is critically important functionality for many users. Except, you should use `extern(C++)` in your D code, and no need to extern in your C++ code.
If we want a good mass adoption rate then we should aim for importing c header files c99 edition.

-Alex

September 24, 2020
On Wednesday, 23 September 2020 at 23:45:38 UTC, Manu wrote:
> Except, you should use `extern(C++)` in your D code, and no need to extern in your C++ code.

Thanks.
September 24, 2020
Remember that if you're linking with Clang, it won't automatically link the
druntime library because it assumes it's linking a C++ program. Make sure
you add the D libraries to your link command if you intend to use the D
runtime library.
Also, if your main function is in C++ like you show, then you need to init
and term the D runtime library:
https://dlang.org/phobos/rt_dmain2.html#.rt_init ... Call those those at
the start/end of your main function since C++'s startup/main won't do it
for you.

On Thu, Sep 24, 2020 at 10:30 AM Ruby The Roobster via Digitalmars-d < digitalmars-d@puremagic.com> wrote:

> On Wednesday, 23 September 2020 at 23:45:38 UTC, Manu wrote:
> > Except, you should use `extern(C++)` in your D code, and no
> > need to extern in your C++ code.
>
> Thanks.
>