You'll need to know which dynamic libraries will be available on your target system and which are not.
For example, on my system
stdio.h is one of the include files of package
libc6-dev (Debian package naming conventions), and the corresponding dynamic library is
libc.so.6 which is a symbolic link to
libc-2.24.so. This is the GNU C Library, which is the basic building block of nearly all programs, so it would be quite unusual for your ARM system to not have it (or some equivalent of it) available as a dynamic library: since it is so universally used and fairly large, having it as a dynamic library makes very much sense.
(Also, GNU C Library itself uses dynamic linking for features like configurable name resolution functions:
/etc/nsswitch.conf tells the C library which
libnss_*.so libraries to load at run-time, so linking the GNU C Library fully statically to your program would be exceptionally tricky.)
If your embedded ARM system does not have a specific
lib*.so file for a specific library installed on it, and you still wish to use that library in your program, then you must link that library statically. And to do that in a cross-compilation situation, you must have the corresponding ARM version of the
lib*.a file of that library on the system you're cross-compiling your program.
Although a library's header files (
*.h) might well be the same for all architectures the library is compilable in, the
*.a files won't be: since the
*.a files both contain executable code, they are specific for each processor architecture. So if you are cross-compiling for ARM on a x86_64 system, having the x86_64 version of some library's
lib*.a file available won't allow you to cross-compile an ARM program using that library statically compiled: you will need the ARM
lib*.a for that library.