I have experience with OCaml. You had to write a stub for every function you wanted to use to convert the types even C int <-> OCaml int. Linking was painful a well. I don't even want to thing about mapping C++ objects.
What about other popular languages? Is it always a pain?
EDIT:
Please avoid duplicates. And state C and C++ interfacing capabilities separately.
EDIT 2:
Please be specific. "X can call C" doesn't give too much information.