The prebuilt curl_cffi wheel was compiled for a newer macOS than yours, and the old system's loader cannot resolve `___chkstk_darwin`. Upgrade curl_cffi (`python -m pip install -U curl_cffi`) to a release whose wheels cover your macOS version. If no wheel covers it, the fallback is upgrading macOS itself.

## The error

```text
ImportError: dlopen([path]/curl_cffi/requests/libs/wrapper.abi3.so, 0x0002): Symbol not found: ___chkstk_darwin
```

## Fix it

1. **Check your macOS and curl_cffi versions**

```
sw_vers -productVersion
python -m pip show curl_cffi | head -2
```
Expected: an older macOS (10.15-era reports cluster here) with an older curl_cffi.

2. **Upgrade curl_cffi**

```
python -m pip install -U curl_cffi
```
Expected: a newer wheel whose minimum macOS matches yours. Re-run the import.

3. **Confirm**

```
python -c "from curl_cffi import Session; print('ok')"
```
Expected: prints `ok` with no dlopen error.

## When this applies

- the ImportError names `___chkstk_darwin` on macOS
- the traceback shows a dlopen of curl_cffi's bundled `.so`
- an older Mac that cannot take the newest macOS

## When it does NOT apply

- Linux `undefined symbol` errors are the Linux cousin (different symbol, usually a glibc mismatch)
- `No module named 'curl_cffi'` is the missing install

## Compatibility

Reported against older curl_cffi wheels on macOS 10.15 and similar. Newer wheels raised the floor or fixed the symbol usage.

## Why it happens

`___chkstk_darwin` is a compiler helper for stack probing on macOS. Wheels built with a newer SDK targeting newer macOS emit references to it, and the dynamic loader on older macOS has no such symbol, so dlopen fails. It is a build-floor problem: the wheel promises an older macOS than its code actually supports.

## Edge cases

- Rosetta vs native rarely matters here; the symbol issue is about the macOS version, not the arch.
- If upgrading is truly impossible, building curl_cffi from source on the old Mac produces a binary matching that system. It needs a compiler and the curl dev headers.
- Do not downgrade Python to dodge this. The symbol comes from the wheel's C code, not the interpreter.
