private void resolveSymbolsToLibrary(ExtLibInfo extLib) throws CancelledException {
			if (extLib.program == null) {
				// can't do anything if the external library doesn't have a valid program associated 
				return;
			}
			ExternalManager externalManager = program.getExternalManager();
			SymbolTable symbolTable = program.getSymbolTable();

			for (Iterator<Long> idIterator = unresolvedExternalFunctionIds.iterator(); idIterator
					.hasNext();) {
				monitor.checkCancelled();
				Symbol s = symbolTable.getSymbol(idIterator.next());
				if (s == null || !s.isExternal() || s.getSymbolType() != SymbolType.FUNCTION) {
					Msg.error(ExternalSymbolResolver.class,
						"Concurrent modification of symbol table while resolving external symbols");
					idIterator.remove();
					continue;
				}

				ExternalLocation extLoc = externalManager.getExternalLocation(s);
				String extLocName =
					Objects.requireNonNullElse(extLoc.getOriginalImportedName(), extLoc.getLabel());
				if (isExportedSymbol(extLib.program, extLocName)) {
					try {
						s.setNamespace(extLib.lib);
						idIterator.remove();
						extLib.resolvedSymbols.add(s.getName());
					}
					catch (DuplicateNameException | InvalidInputException
							| CircularDependencyException e) {
						Msg.error(ExternalSymbolResolver.class,
							"Error setting external symbol namespace for " + extLoc.getLabel(), e);
					}
				}
			}
		}
Moves unresolved functions from the EXTERNAL/UNKNOWN namespace to the namespace of the 
external library if the extLib publishes a symbol with a matching name.

@param extLib  {@link ExtLibInfo} representing an external library
@throws CancelledException if cancelled
Ghidra/Features/Base/src/main/java/ghidra/program/util/ExternalSymbolResolver.java