I believe the issue is Tiger is pickier about public/private function calls or variables, and considers some of the ones Nim uses to be private.
Apple had trouble trying to both be ANSI/POSIX/XOPEN_SOURCE compliant and also to enable all the functions that the system supported and people/software expected to find. Also, functions would slightly change their calling parameters and returned parameters based on new UNIX standards.
In the 10.4 headers they used a macro called __DARWIN_UNIX03 to enable the newer behaviour. Much/most software expects the newer behaviour, so you often need to define that.
A collection of those pesky SDK folders: MacOSX10.1.5.sdk thru MacOSX11.3.sdk - phracker/MacOSX-SDKs
github.com
To get the full list of available functions, you often have to turn off the POSIX standard set by some software in their headers, source, or build systems, is disable _ANSI_SOURCE and _POSIX_C_SOURCE by setting them to 0 or otherwise not setting them at all.
A collection of those pesky SDK folders: MacOSX10.1.5.sdk thru MacOSX11.3.sdk - phracker/MacOSX-SDKs
github.com
In the LegacySupport headers, we sometimes would define these functions ourselves because of this:
Certain system functions on Tiger are not declared in the presence of _ANSI_SOURCE, _POSIX_C_SOURCE, or _XOPEN_SOURCE. This behavior can be difficult to work around in source because _XOPEN_SOURCE ...
github.com
This was, all in all, a rather huge PITA to work around, so in 10.5 Apple said "Stuff this" and just set up their own macro called _DARWIN_C_SOURCE to disable all the ANSI, POSIX, XOPEN_SOURCE, etc stuff that was frustrating everyone. This macro is almost always defined when building on MacOS on 10.5+ , so that is why things work more easily there.
eg:
A collection of those pesky SDK folders: MacOSX10.1.5.sdk thru MacOSX11.3.sdk - phracker/MacOSX-SDKs
github.com
Now, things would be much simpler when building on Tiger if you could just build against the 10.5 SDK and target MacOSX 10.4. Apple designed the system to be able to do that, and it does work if you are building on a 10.5+ system, to target 10.4. However, I was never able to reliably get software to build on 10.4 against the 10.5 SDK. There was always some kind of issue with the libgcc underpinnings and it would never link correctly.
That problem could presumably be solved with more effort expended. I ran out of time for that, so it was easier to just add more workaround to the 10.4 SDK instead, frustrating as that could get.