I have a function (in case anyone is interested, it is this function) in a module that looks like this
MODULE MYMODULE
IMPLICIT NONE
! Some random s
Judging from the incomplete source code you posted, I'm thinking this may be the offending line:
CHARACTER(LEN=255) :: strtok
Since the subroutine DO_SOMETHING and the function strtok are in the same module, they automatically know about each other's definition (they have an explicit interface). This means it is not only unnecessary to redeclare the function strtok's type inside DO_SOMETHING, but what actually happens is that this line declares a new character variable named strtok in the scope of subroutine DO_SOMETHING, overruling the module function with the same name.
Basically, inside the subroutine, the identifier strtok refers to a variable, so when you try to refer to a function by that name, the compiler doesn't know about it.
Hmm, now that I'm writing this, I'm starting to think this should give a compile time error, not a linking error. Still, might be worth it to try and comment out the line I mentioned and give it a go.