xcrun --show-sdk-path
C Tools Last updated Feb 11, 2025
Linux
MacOS
The static linker (or “link editor”) is ld, the dynamic linker is dyld.
Relevant manpages: ld(1), dyld(1), dyld_info(1) (not dyldinfo);
xcrun
“[P]rovides a means to locate or invoke developer tools from the command-line”.
E.g. compare xcrun -find <tool> and which <tool>.
xcrun --find clang
Finds the path to the clang binary in the default SDK.
xcrun --sdk macosx --show-sdk-path
Prints the path to the current Mac OS X SDK.
xcrun --sdk macosx clang test.c
compile using clang from the macosx sdk
xcode-select(1)
xcodebuild(1)
xcodebuild -showsdks
Lists all available SDKs that Xcode knows about.
otool(1)
“Preferred tool for inspecting Mach-O binaries”
See also llvm-otool(1), objdump(1), etc. “The unambiguous
invocation of otool(1) can be found as otool-classic(1) and typically
will be run by using the xcrun(1) utility:
% xcrun otool-classic -hv file
-l print the load commands -L print shared libraries used -D print shared library id name -C print linker optimization hints
install_name_tool(1)
libtool(1)
“The libtool command takes the specified input object files and creates a library for use with the link editor, ld(1).”
-
“Libtool with -static is intended to replace ar(5) and ranlib.”
-
“To build a dynamically linked library, libtool, runs the link editor, ld(1), with -dylib once for each architecture present in the input objects and then lipo(1) to create a universal file if needed.”
“To maximize sharing of a dynamically linked shared library the objects should be compiled with the -dynamic flag of cc(1) to produce indirect undefined references and position-independent code.”
lipo
“Creates or operates on ``universal'' (multi-architecture) files.”
vtool
“Displays and edits build and source version numbers embedded in the Mach-O(5) file format.”
$ vtool -show bazel-bin/src/test.exe
bazel-bin/src/test.exe:
Load command 11
cmd LC_BUILD_VERSION
cmdsize 32
platform MACOS
minos 14.0
sdk 14.5
ntools 1
tool LD
version 1053.12
Load command 12
cmd LC_SOURCE_VERSION
cmdsize 16
version 0.0
executable: dynamic libs
To see which dynamic libs are linked into an executable:
export DYLD_PRINT_LIBRARIES=1 export DYLD_PRINT_LIBRARIES_POST_LAUNCH=1 export DYLD_PRINT_RPATHS=1