I've tracked it down to two lines (which are the same):
private SyncLock lock = new SyncLock();SyncLock is just an empty class which I use to construct objects for use in "synchronized" blocks (not sure if this is the right way to do this). Apparently if I move the initialization to the constructor there are no linker errors.