I have successfully link c++ with D.

Have ever when I create a dependency:
cpp2->cpp1->d

when compile with dmd

dmd cpp1.a cpp2.a file.d -L-lstdc++

It compiles but when I run it I get

relocation error: "some path": symbol _ZNSsC1EPKcRKSaIcE, version GLIBCXX_3.4 not defined in file libstdc++.so.6 with link time reference

When I replace the string variable of bar2 in cbin2.cpp with an interger, code runs.

here is the files:

****dfile***
import std.stdio;
extern (C++) void foo(int i, int j, int k) {
  writefln("i = %s", i);
  writefln("j = %s", j);
  writefln("k = %s", k);
  writefln("looks ok");
}

extern (C++) void bar();

void main(){
  writeln("Testing callinf C++ main from D\n");
  bar();
}
****cbin.cpp***
#include <vector>
#include <iostream>
using namespace std;
void bar2(string i);

void bar(){
  bar2("cbin.cpp");
  printf("PRINTF:In cbin code\n");
}
****cbin2.cpp
#include <vector>
#include <iostream>

using namespace std;

void bar2(string s){
  cout << "cbin2 c++ library called from:" << s;
}

Reply via email to