protected Program openLibraryFile(DomainFile libDf, String libPath) throws CancelledException {
		try {
			if (libDf == null) {
				throw new IOException("Dangling external path: " + libPath);
			}
			DomainObject libDo = libDf.getDomainObject(this, false, false, monitor);
			if (libDo instanceof Program p) {
				return p;
			}
			libDo.release(this);
			throw new IOException("Referenced external program is not a program: " + libPath);
		}
		catch (IOException | VersionException e) {
			problemLibraries.put(libPath, e);
		}
		return null;
	}
Opens a library binary.

@param libDf optional, reference to a the DomainFile that was found in a project.  If null
(meaning a lookup in the project failed to find a matching file), libPath will be used when
creating error strings that reference the problematic file
@param libPath project path for the DomainFile
@return a opened {@link Program}
@throws CancelledException if cancelled
Ghidra/Features/Base/src/main/java/ghidra/program/util/ExternalSymbolResolver.java