I don’t think this can be done with blender’s built-in constraints alone, but you can write your own constraints in python.
Give your 2 objects names. I called the gear with the IPO “LeadGear” and the gear to be driven “TailGear” - but you can call them whatever you’d like.
You can change the name in editbuttons (f9), it’s the box labelled OB in the top left.
Bring up a script window (Shift+F11) and Add New. Give it some useful name like “GearsConstraint” or something.
Type in something like:
import Blender
driver = Blender.Object.Get("LeadGear")
drivee = Blender.Object.Get("TailGear")
drivee.RotY = driver.RotZ * 0.5
Blender.Redraw()
I used the 0.5 because my driver gear was half the size of my drivee gear. You can put any number here to change the gear ratio. If you find that the gears rotate the wrong way, just make this negative.
Then you bring up the script buttons (between logic buttons and material buttons), click on “New” in the script links, set it to FrameChanged and type in the name of the script. This will make it run the script every time the frame changes - even while rendering.
If you have several gears, you can either have several scripts and several script links, or you can put several in one script, like:
import Blender
driver = Blender.Object.Get("LeadGear")
drivee = Blender.Object.Get("MidGear")
drivee.RotY = driver.RotZ * 0.5
driver = Blender.Object.Get("MidGear")
drivee = Blender.Object.Get("TailGear")
drivee.RotX = driver.RotY * -3
Blender.Redraw()
To avoid a nasty problem with Euler coordinates called “Gimbol Lock”, use Ctrl+Alt+A (Apply size+rot) to reset the local axes to match the global axes. Then change the RotX/Y/Z to whatever axes the gears rotate on.
To see what gimbol lock is, add an empty, then set it’s rotation x/y/z in the N panel to 0, 90, 0 to make it sideways. Then figure out which value to change to make it rotate around its Z axis. The answer is that there isn’t one, but if you set the rotation to 90, 90, 90 then you get the same rotation, but changing RotY rotates it around the local Z axis. But now the Y axis is “locked”.
Rather than go through all that to try to figure out which axis to use, it’s easier to just Ctrl+Shift+A, then it’s all fine (assuming you’re rotation is around a real axis… if it’s not, I’d make it so it is, than parent it to an empty and move the empty into position).
I only bring it up because I hit that exact problem when setting up a test scene for the script above. 
HTH