Thread overview
How can I execute C++ functions from Dlang?
Aug 14, 2023
thePengüin
Aug 14, 2023
Ferhat Kurtulmuş
Aug 19, 2023
thePengüin
Aug 19, 2023
thePengüin
Aug 19, 2023
Ferhat Kurtulmuş
Aug 19, 2023
thePengüin
Aug 19, 2023
thePengüin
Aug 19, 2023
Ferhat Kurtulmuş
Aug 14, 2023
Sergey
Aug 19, 2023
thePengüin
August 14, 2023

hola a todos quisiera ejecutar este codigo de c++
`
#include <iostream>

using namespace std;

int main() {

	return 0;
}

int foo(int i, int j) {
	cout \<\< i\<\<endl;
	cout \<\< j \<\< endl;
	return 7;
}
`

con este comando: g++ -shared app2.cpp -o app2.obj
y este es mi codigo en Dlang

`
#!/usr/bin/env dmd
import core.stdc.stdio;

import std;

alias print = writeln;

extern(C++) int foo(int i, int j);
void main () {

	foo(3,6);

}
` con este comando: dmd app1.d app2.obj
pero tengo este error:
lld-link: error: app2.obj: unknown file type
Error: linker exited with status 1

August 14, 2023

On Monday, 14 August 2023 at 06:40:04 UTC, thePengüin wrote:

>

hola a todos quisiera ejecutar este codigo de c++
`
#include <iostream>

using namespace std;

int main() {

	return 0;
}

int foo(int i, int j) {
	cout \<\< i\<\<endl;
	cout \<\< j \<\< endl;
	return 7;
}
`

con este comando: g++ -shared app2.cpp -o app2.obj
y este es mi codigo en Dlang

`
#!/usr/bin/env dmd
import core.stdc.stdio;

import std;

alias print = writeln;

extern(C++) int foo(int i, int j);
void main () {

	foo(3,6);

}
` con este comando: dmd app1.d app2.obj
pero tengo este error:
lld-link: error: app2.obj: unknown file type
Error: linker exited with status 1

?Tu usas ambos de 64 bit o 32 bit para compiladores?

No puedo reproducir tu codigo. Pero yo puedo ejecutar esto en Windows:

cppcode.cpp

#include <iostream>

using namespace std;

// no nececitamos un main aqui

int foo(int i, int j) {
	cout << i << endl;
	cout << j << endl;
	return 7;
}

main.d

extern(C++) int foo(int i, int j);

void main () {
    foo(3,6);
}

La compulacion:

cl cppcode.cpp -c
dmd main.d cppcode.obj

August 14, 2023

On Monday, 14 August 2023 at 06:40:04 UTC, thePengüin wrote:

>

hola a todos quisiera ejecutar este codigo de c++
Error: linker exited with status 1

Hola.
On the page https://dlang.org/spec/cpp_interface.html
commands to run also have different flags. Did you try them?

>

g++ -c foo.cpp
dmd bar.d foo.o -L-lstdc++ && ./bar

August 19, 2023

On Monday, 14 August 2023 at 07:36:31 UTC, Ferhat Kurtulmuş wrote:

>

On Monday, 14 August 2023 at 06:40:04 UTC, thePengüin wrote:

>

[...]

?Tu usas ambos de 64 bit o 32 bit para compiladores?

No puedo reproducir tu codigo. Pero yo puedo ejecutar esto en Windows:

cppcode.cpp

#include <iostream>

using namespace std;

// no nececitamos un main aqui

int foo(int i, int j) {
	cout << i << endl;
	cout << j << endl;
	return 7;
}

main.d

extern(C++) int foo(int i, int j);

void main () {
    foo(3,6);
}

La compulacion:

cl cppcode.cpp -c
dmd main.d cppcode.obj

que compilador estas usando a la hora de hacer el del .cpp

August 19, 2023

On Monday, 14 August 2023 at 07:38:46 UTC, Sergey wrote:

>

On Monday, 14 August 2023 at 06:40:04 UTC, thePengüin wrote:

>

hola a todos quisiera ejecutar este codigo de c++
Error: linker exited with status 1

Hola.
On the page https://dlang.org/spec/cpp_interface.html
commands to run also have different flags. Did you try them?

>

g++ -c foo.cpp
dmd bar.d foo.o -L-lstdc++ && ./bar

estoy en windows y me sale este error:
Error: unrecognized file extension o
el g++ -c me da de resultado un archivo con .o y el dmd solo me permite con .obj pero ni aun asi me funciona

August 19, 2023

On Monday, 14 August 2023 at 07:36:31 UTC, Ferhat Kurtulmuş wrote:

>

On Monday, 14 August 2023 at 06:40:04 UTC, thePengüin wrote:

>

hola a todos quisiera ejecutar este codigo de c++
`
#include <iostream>

using namespace std;

int main() {

	return 0;
}

int foo(int i, int j) {
	cout \<\< i\<\<endl;
	cout \<\< j \<\< endl;
	return 7;
}
`

con este comando: g++ -shared app2.cpp -o app2.obj
y este es mi codigo en Dlang

`
#!/usr/bin/env dmd
import core.stdc.stdio;

import std;

alias print = writeln;

extern(C++) int foo(int i, int j);
void main () {

	foo(3,6);

}
` con este comando: dmd app1.d app2.obj
pero tengo este error:
lld-link: error: app2.obj: unknown file type
Error: linker exited with status 1

?Tu usas ambos de 64 bit o 32 bit para compiladores?

No puedo reproducir tu codigo. Pero yo puedo ejecutar esto en Windows:

cppcode.cpp

#include <iostream>

using namespace std;

// no nececitamos un main aqui

int foo(int i, int j) {
	cout << i << endl;
	cout << j << endl;
	return 7;
}

main.d

extern(C++) int foo(int i, int j);

void main () {
    foo(3,6);
}

La compulacion:

cl cppcode.cpp -c
dmd main.d cppcode.obj

estoy usando el de 64 o almenos eso es lo que me dice cuando hago un dmd --version:
DMD64 D Compiler v2.104.2-dirty
Copyright (C) 1999-2023 by The D Language Foundation, All Rights Reserved written by Walter Bright

por cierto "cl" en ves de g++, creo que es la abreviatura de "compilador" no? porque cl no me sale como comando en el mingw64x84

August 19, 2023

On Saturday, 19 August 2023 at 19:41:47 UTC, thePengüin wrote:

>

On Monday, 14 August 2023 at 07:36:31 UTC, Ferhat Kurtulmuş wrote:

>

On Monday, 14 August 2023 at 06:40:04 UTC, thePengüin wrote:

>

hola a todos quisiera ejecutar este codigo de c++
`
#include <iostream>

using namespace std;

int main() {

	return 0;
}

int foo(int i, int j) {
	cout \<\< i\<\<endl;
	cout \<\< j \<\< endl;
	return 7;
}
`

con este comando: g++ -shared app2.cpp -o app2.obj
y este es mi codigo en Dlang

`
#!/usr/bin/env dmd
import core.stdc.stdio;

import std;

alias print = writeln;

extern(C++) int foo(int i, int j);
void main () {

	foo(3,6);

}
` con este comando: dmd app1.d app2.obj
pero tengo este error:
lld-link: error: app2.obj: unknown file type
Error: linker exited with status 1

?Tu usas ambos de 64 bit o 32 bit para compiladores?

No puedo reproducir tu codigo. Pero yo puedo ejecutar esto en Windows:

cppcode.cpp

#include <iostream>

using namespace std;

// no nececitamos un main aqui

int foo(int i, int j) {
	cout << i << endl;
	cout << j << endl;
	return 7;
}

main.d

extern(C++) int foo(int i, int j);

void main () {
    foo(3,6);
}

La compulacion:

cl cppcode.cpp -c
dmd main.d cppcode.obj

estoy usando el de 64 o almenos eso es lo que me dice cuando hago un dmd --version:
DMD64 D Compiler v2.104.2-dirty
Copyright (C) 1999-2023 by The D Language Foundation, All Rights Reserved written by Walter Bright

por cierto "cl" en ves de g++, creo que es la abreviatura de "compilador" no? porque cl no me sale como comando en el mingw64x84

Estoy escribendo en mi celular. Entonces no tomo ayudar de Google translate. Mi español no es bueno, disculpa. Nunca uso un mesclar de mingw-g++ y algun d compilador en Windows. cl es el comando del Visual C++. No sé si g++ y dmd son binarias compatibles. Yo siempre uso LDC en Windows. Creo que tu deberias installar e uso Visual studio c++ community edition. Los compiladores msvc juega bien con los compiladores de dlang.

Que es cl.exe: https://learn.microsoft.com/en-us/cpp/build/reference/compiler-options?view=msvc-170

August 19, 2023

On Saturday, 19 August 2023 at 20:16:47 UTC, Ferhat Kurtulmuş wrote:

>

On Saturday, 19 August 2023 at 19:41:47 UTC, thePengüin wrote:

>

On Monday, 14 August 2023 at 07:36:31 UTC, Ferhat Kurtulmuş wrote:

>

On Monday, 14 August 2023 at 06:40:04 UTC, thePengüin wrote:

>

hola a todos quisiera ejecutar este codigo de c++
`
#include <iostream>

using namespace std;

int main() {

	return 0;
}

int foo(int i, int j) {
	cout \<\< i\<\<endl;
	cout \<\< j \<\< endl;
	return 7;
}
`

con este comando: g++ -shared app2.cpp -o app2.obj
y este es mi codigo en Dlang

`
#!/usr/bin/env dmd
import core.stdc.stdio;

import std;

alias print = writeln;

extern(C++) int foo(int i, int j);
void main () {

	foo(3,6);

}
` con este comando: dmd app1.d app2.obj
pero tengo este error:
lld-link: error: app2.obj: unknown file type
Error: linker exited with status 1

?Tu usas ambos de 64 bit o 32 bit para compiladores?

No puedo reproducir tu codigo. Pero yo puedo ejecutar esto en Windows:

cppcode.cpp

#include <iostream>

using namespace std;

// no nececitamos un main aqui

int foo(int i, int j) {
	cout << i << endl;
	cout << j << endl;
	return 7;
}

main.d

extern(C++) int foo(int i, int j);

void main () {
    foo(3,6);
}

La compulacion:

cl cppcode.cpp -c
dmd main.d cppcode.obj

estoy usando el de 64 o almenos eso es lo que me dice cuando hago un dmd --version:
DMD64 D Compiler v2.104.2-dirty
Copyright (C) 1999-2023 by The D Language Foundation, All Rights Reserved written by Walter Bright

por cierto "cl" en ves de g++, creo que es la abreviatura de "compilador" no? porque cl no me sale como comando en el mingw64x84

Estoy escribendo en mi celular. Entonces no tomo ayudar de Google translate. Mi español no es bueno, disculpa. Nunca uso un mesclar de mingw-g++ y algun d compilador en Windows. cl es el comando del Visual C++. No sé si g++ y dmd son binarias compatibles. Yo siempre uso LDC en Windows. Creo que tu deberias installar e uso Visual studio c++ community edition. Los compiladores msvc juega bien con los compiladores de dlang.

Que es cl.exe: https://learn.microsoft.com/en-us/cpp/build/reference/compiler-options?view=msvc-170

  • ok, don't worry, Your spanish is so right, hehe I don't actually english cause I'm feel lazy xd.
  • gracias no sabia que existia el Visual C++, gracias por el dato ahora mismo lo busco.
August 19, 2023

On Saturday, 19 August 2023 at 20:16:47 UTC, Ferhat Kurtulmuş wrote:

>

On Saturday, 19 August 2023 at 19:41:47 UTC, thePengüin wrote:

>

On Monday, 14 August 2023 at 07:36:31 UTC, Ferhat Kurtulmuş wrote:

>

On Monday, 14 August 2023 at 06:40:04 UTC, thePengüin wrote:

>

hola a todos quisiera ejecutar este codigo de c++
`
#include <iostream>

using namespace std;

int main() {

	return 0;
}

int foo(int i, int j) {
	cout \<\< i\<\<endl;
	cout \<\< j \<\< endl;
	return 7;
}
`

con este comando: g++ -shared app2.cpp -o app2.obj
y este es mi codigo en Dlang

`
#!/usr/bin/env dmd
import core.stdc.stdio;

import std;

alias print = writeln;

extern(C++) int foo(int i, int j);
void main () {

	foo(3,6);

}
` con este comando: dmd app1.d app2.obj
pero tengo este error:
lld-link: error: app2.obj: unknown file type
Error: linker exited with status 1

?Tu usas ambos de 64 bit o 32 bit para compiladores?

No puedo reproducir tu codigo. Pero yo puedo ejecutar esto en Windows:

cppcode.cpp

#include <iostream>

using namespace std;

// no nececitamos un main aqui

int foo(int i, int j) {
	cout << i << endl;
	cout << j << endl;
	return 7;
}

main.d

extern(C++) int foo(int i, int j);

void main () {
    foo(3,6);
}

La compulacion:

cl cppcode.cpp -c
dmd main.d cppcode.obj

estoy usando el de 64 o almenos eso es lo que me dice cuando hago un dmd --version:
DMD64 D Compiler v2.104.2-dirty
Copyright (C) 1999-2023 by The D Language Foundation, All Rights Reserved written by Walter Bright

por cierto "cl" en ves de g++, creo que es la abreviatura de "compilador" no? porque cl no me sale como comando en el mingw64x84

Estoy escribendo en mi celular. Entonces no tomo ayudar de Google translate. Mi español no es bueno, disculpa. Nunca uso un mesclar de mingw-g++ y algun d compilador en Windows. cl es el comando del Visual C++. No sé si g++ y dmd son binarias compatibles. Yo siempre uso LDC en Windows. Creo que tu deberias installar e uso Visual studio c++ community edition. Los compiladores msvc juega bien con los compiladores de dlang.

Que es cl.exe: https://learn.microsoft.com/en-us/cpp/build/reference/compiler-options?view=msvc-170

  • te refieres al ldc de Dlang en windows no?
August 19, 2023

On Saturday, 19 August 2023 at 20:50:23 UTC, thePengüin wrote:

>

On Saturday, 19 August 2023 at 20:16:47 UTC, Ferhat Kurtulmuş wrote:

>

On Saturday, 19 August 2023 at 19:41:47 UTC, thePengüin wrote:

>

On Monday, 14 August 2023 at 07:36:31 UTC, Ferhat Kurtulmuş wrote:

>

[...]

estoy usando el de 64 o almenos eso es lo que me dice cuando hago un dmd --version:
DMD64 D Compiler v2.104.2-dirty
Copyright (C) 1999-2023 by The D Language Foundation, All Rights Reserved written by Walter Bright

por cierto "cl" en ves de g++, creo que es la abreviatura de "compilador" no? porque cl no me sale como comando en el mingw64x84

Estoy escribendo en mi celular. Entonces no tomo ayudar de Google translate. Mi español no es bueno, disculpa. Nunca uso un mesclar de mingw-g++ y algun d compilador en Windows. cl es el comando del Visual C++. No sé si g++ y dmd son binarias compatibles. Yo siempre uso LDC en Windows. Creo que tu deberias installar e uso Visual studio c++ community edition. Los compiladores msvc juega bien con los compiladores de dlang.

Que es cl.exe: https://learn.microsoft.com/en-us/cpp/build/reference/compiler-options?view=msvc-170

  • te refieres al ldc de Dlang en windows no?

Sí, yo queria decir esto. Lo puedes descargar aqui: https://github.com/ldc-developers/ldc/releases/tag/v1.33.0

Por favor te recorda que cuando tu installaste msvc, siempre ejecuta tus comandos del compiladores (cl, ldc2 o dmd, etc.) en terminal del msvc. Puedes buscarlo en menu de inicio de windows porque automatiza link con bibliotheca de stdc++.