Re: Just starting with D (linking with C++)

2017-10-28 Thread sivakon via Digitalmars-d-learn

On Saturday, 28 October 2017 at 02:20:42 UTC, codephantom wrote:

On Friday, 27 October 2017 at 17:14:20 UTC, sivakon wrote:
I want to use C++ libraries for machine learning and deep 
learning. How do I add C++ libraries to my d code.


on FreeBSD, I use:

for C static binding:
--
clang -c sample.c

dmd -L-lc foo.d sample.o
or
ldc -L-lc foo.d sample.o


for c++ static binding:
---
clang++ -c sample.cpp

dmd -L-lc++ foo.d sample.o
or
ldc -L-lc++ foo.d sample.o


There is nice article here that was pretty interesting too:
https://www.gamedev.net/blogs/entry/2254003-binding-d-to-c/


Thanks! That worked like a charm. Now I can use dlang 
confidently. Any tips to make it faster cflags etc.


Re: Just starting with D (linking with C++)

2017-10-27 Thread codephantom via Digitalmars-d-learn

On Friday, 27 October 2017 at 17:14:20 UTC, sivakon wrote:
I want to use C++ libraries for machine learning and deep 
learning. How do I add C++ libraries to my d code.


on FreeBSD, I use:

for C static binding:
--
clang -c sample.c

dmd -L-lc foo.d sample.o
or
ldc -L-lc foo.d sample.o


for c++ static binding:
---
clang++ -c sample.cpp

dmd -L-lc++ foo.d sample.o
or
ldc -L-lc++ foo.d sample.o


There is nice article here that was pretty interesting too:
https://www.gamedev.net/blogs/entry/2254003-binding-d-to-c/



Re: Just starting with D (linking with C++)

2017-10-27 Thread Joakim via Digitalmars-d-learn

On Friday, 27 October 2017 at 17:43:08 UTC, sivakon wrote:

On Friday, 27 October 2017 at 17:21:39 UTC, Joakim wrote:


This should work:

dmd foo.d Sample.o

Just like the C examples from the D blog:

https://dlang.org/blog/2017/10/25/dmd-windows-and-c/


Just used this! Got this error!

sample.o: In function `foo(int, int, int)':
sample.cpp:(.text+0x17): undefined reference to `std::cout'


Sorry, just responded quickly from my tablet, didn't try it out 
first.  There's actually a variant of this sample that is run as 
a test from the dmd compiler testsuite, so it is checked hundreds 
of times a day for pending pull requests, on all officially 
supported platforms by the auto-tester:


https://auto-tester.puremagic.com/pulls.ghtml?projectid=1
https://github.com/dlang/dmd/blob/master/test/runnable/extra-files/cppb.cpp#L41
https://github.com/dlang/dmd/blob/master/test/runnable/cppa.d#L25

Looking at the D script that runs each compiler test, it adds the 
following flag for all C++ objects:


https://github.com/dlang/dmd/blob/master/test/d_do_test.d#L499

So adding that flag got your example to work for me:

dmd -L-lstdc++ foo.d Sample.o


Re: Just starting with D (linking with C++)

2017-10-27 Thread Steven Schveighoffer via Digitalmars-d-learn

On 10/27/17 1:43 PM, sivakon wrote:

On Friday, 27 October 2017 at 17:21:39 UTC, Joakim wrote:


This should work:

dmd foo.d Sample.o

Just like the C examples from the D blog:

https://dlang.org/blog/2017/10/25/dmd-windows-and-c/


Just used this! Got this error!

sample.o: In function `foo(int, int, int)':
sample.cpp:(.text+0x17): undefined reference to `std::cout'


You need to link against the C++ standard library. On my system, it 
appears to be -lc++.


So in order to pass this value to the linker, use the dmd parameter -L-lc++

In order to find out what the name of the c++ library is, you need to 
compile a C++ program with the -v option. The linker step will show the 
library parameters you need to send to dmd.


-Steve


Re: Just starting with D (linking with C++)

2017-10-27 Thread sivakon via Digitalmars-d-learn

On Friday, 27 October 2017 at 17:21:39 UTC, Joakim wrote:


This should work:

dmd foo.d Sample.o

Just like the C examples from the D blog:

https://dlang.org/blog/2017/10/25/dmd-windows-and-c/


Just used this! Got this error!

sample.o: In function `foo(int, int, int)':
sample.cpp:(.text+0x17): undefined reference to `std::cout'


Re: Just starting with D (linking with C++)

2017-10-27 Thread Joakim via Digitalmars-d-learn

On Friday, 27 October 2017 at 17:14:20 UTC, sivakon wrote:

Hi,

Just started to work with D. Great language.

I want to use C++ libraries for machine learning and deep 
learning. How do I add C++ libraries to my d code.


For example,

//sample.cpp
#include 

using namespace std;

int foo(int i, int j, int k)
{
cout << "i = " << i << endl;
cout << "j = " << j << endl;
cout << "k = " << k << endl;

return 7;
}


//foo.d
extern (C++) int foo(int i, int j, int k);

void main()
{
foo(1,2,3);
}


How do I compile and link each of them to produce the result?
dmd -c foo.d
gcc -c Sample.cpp

Both of them get me .o files. Where do I go from there?

Thanks,
Siv


This should work:

dmd foo.d Sample.o

Just like the C examples from the D blog:

https://dlang.org/blog/2017/10/25/dmd-windows-and-c/


Just starting with D (linking with C++)

2017-10-27 Thread sivakon via Digitalmars-d-learn

Hi,

Just started to work with D. Great language.

I want to use C++ libraries for machine learning and deep 
learning. How do I add C++ libraries to my d code.


For example,

//sample.cpp
#include 

using namespace std;

int foo(int i, int j, int k)
{
cout << "i = " << i << endl;
cout << "j = " << j << endl;
cout << "k = " << k << endl;

return 7;
}


//foo.d
extern (C++) int foo(int i, int j, int k);

void main()
{
foo(1,2,3);
}


How do I compile and link each of them to produce the result?
dmd -c foo.d
gcc -c Sample.cpp

Both of them get me .o files. Where do I go from there?

Thanks,
Siv