There is a fundamental difference between dynamically typed and statically typed languages though. And if you want to AOT compile a dynamically typed language, then you're going to need to include code that looks awfully like an interpreter in the final binary.
Dynamic typing is really just passing around variables using an enumerated type. You don't need anything resembling an interpreter to do this and it's how the C extension APIs for many dynamic languages like Ruby and Lua work.
I think people in this thread are using 'dynamic typing' more as a shortcut to also mean features like eval, which does require a full interpreter or compiler.
This might be right, but it’s also true that most Common Lisp program can be compiled to machine code that’s very similar to what a C compiler would produce, except for the occasional runtime type check.
It depends what an interpreter means to you. You might need to use hash table lookups of variables and do switch cases on types in trickier cases where the compiler can't figure out what's going on, but you can leave out the main VM/interpreter part.