presumably shiftOutByte() is defined in C++ code (.cpp or .ino file), and is therefore "name mangled" into a symbol that reflects the full function signature (including argument types.) Try prototyping it like:
extern "C" void shiftOutByte(byte b);
See also Standard C++