Hint: if the linker shows the signature of a function, then it knows the signature of that function. What does this mean? It means that it has been somehow encoded in the function name at compilation time, i. e. you are the victim of C++ name mangling.
It seems that the xdo.h
header doesn't contain safeguards for the case when the C code is compiled as C++. Declare the functions as extern "C"
manually for yourself, then recompile, and it will work.