You were able to make the clang linkage:
clang -dynamic -bundle -o asdf -L/usr/local/Cellar/mysql/8.0.19/lib -lmysqlclient -lssl -lcrypt -v
succeed when it otherwise failed by setting:
export LIBRARY_PATH=/usr/local/opt/openssl@1.1/lib/
in the environment of the clang command.
That's evidence that clang is influenced by the LIBRARY_PATH environment
variable in the same way as GCC compilers.
LIBRARY_PATH is not mentioned in the ENVIRONMENT section of man clang,
or indeed at all, so this GCC-like behaviour can strictly be viewed as not mandatory.
It seems likely however that the omission is an oversight in the manual,
since clang generally strives to be an unobtrusive substitute for gcc. If
we run a Linux clang linkage in verbose mode:
$ export LIBRARY_PATH=/wheres/wally; clang -v main.o -L. -lfoo -lbar
clang version 10.0.0-4ubuntu1
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/8
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/9
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/9
Candidate multilib: .;@m64
Selected multilib: .;@m64
"/usr/bin/ld" -z relro --hash-style=gnu --build-id --eh-frame-hdr \
-m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o a.out \
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crt1.o \
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o \
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/crtbegin.o \
-L. -L/usr/bin/../lib/gcc/x86_64-linux-gnu/9 \
-L/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu \
-L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu \
-L/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../.. \
-L/usr/lib/llvm-10/bin/../lib -L/lib -L/usr/lib \
-L/wheres/wally \ # < There's wally!
main.o -lfoo -lbar -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc \
--as-needed -lgcc_s --no-as-needed \
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/crtend.o \
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o
we observe clang inserting the expansion of -L${LIBRARY_PATH} into
the ld commandline after all of the other -Ldir options. And if we
track down LIBRARY_PATH in the clang source tree,
we'll see the code that makes it do so.
In the ENVIRONMENT section of man gcc,
LIBRARY_PATH is documented:
LIBRARY_PATH
The value of LIBRARY_PATH is a colon-separated list of directories, much like PATH .
When configured as a native compiler, GCC tries the directories thus specified when
searching for special linker files, if it can't find them using GCC_EXEC_PREFIX .
Linking using GCC also uses these directories when searching for ordinary libraries
for the -l option (but directories specified with -L come first).
and the same appears verbatim in GCC online documentation: 3.21 Environment Variables Affecting GCC
What clang does with LIBRARY_PATH conforms with the sentence I've emphasised.
It's worth knowing that while using LIBRARY_PATH for this purpose may have got
you out of a jam, it is not favoured in regular linkage practice, because it is
likely to be an invisible hand when you are studying the output of a
linkage: its effect is only revealed in verbose mode (by either gcc or clang). The
installer's recommendation:
export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
is what you'd expect. I've no insight into why it didn't work for you.