A common case is a static link to a third user library when dynamically linked to system frameworks and libraries, so your users do not need to install third-party libraries before using your program. If a library is dynamically linked to frameworks (as is often the case), it can still come with a static .a, but just replacing -l<libname> with /path/to/libname.a not enough, because .a will not have dependencies in that. You will also have to dynamically link to the frameworks that your library used.
For example, let's say you want to write a program that uses open source libusb without requiring the user to download and install libusb. Let's say you have a dynamically linked bination that you created with this:
clang -lusb-1.0 main.c -o myprogram
To statically reference OS X, the command looks like this (note the -framework arguments):
clang -framework CoreFoundation -framework IOKit main.c /path/to/libusb-1.0.a -o myprogram
To find out which system framework and libraries you need to add, look at a third-party dylib using otool:
otool -L /usr/local/opt/libusb/lib/libusb-1.0.0.dylib
which shows:
/usr/local/opt/libusb/lib/libusb-1.0.0.dylib: /usr/local/opt/libusb/lib/libusb-1.0.0.dylib (compatibility version 2.0.0, current version 2.0.0) /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0) /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0) /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1348.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
You can start by adding frameworks followed by libraries one at a time, and you will see that the list of undefined errors is reduced. Note that you probably will not need to add each library, because some may be loaded as dependencies for those that you explicitly added.
If you do not know where dylib is located, create your program in the original dynamic way (with -lusb-1.0) and run otool on it:
clang -lusb-1.0 main.c -o myprogram otool -L myprogram
which gives:
myprogram: /usr/local/opt/libusb/lib/libusb-1.0.0.dylib (compatibility version 2.0.0, current version 2.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
Also read the license of the library you are referring to.