Q1: What if there are several methods named main in the code, some are static, some are not, some have the right signature some not.
A1: You only care about static methods that have the exact signature - ones thay accepts one argument of type string[] (the name of the argument is not important) and return void. Any method that does not match these criteria is not a main method. The code must have exactly one main method.

Q2: What do you mean by "verify that the library class has the correct name?"
A2: You compiler should parse libic.sig (either in the current library or in the path specified by -L), using the library parser. When you parse that file you should get an AST where the root node is a class node. Each class node know the name of the class (by a string). Just check that the string equals("Library"), which is what we expect to have in libic.sig.