I am developing a LLVM project and using LLVM building system to make an opt pass. I find that if I implement class methods in seperate .cpp files(the class declaration is included by all .cpp files), it will have relocation error when I use opt -mypass to run it. I have tried to squeeze everything in one file, then all errors are gone. But when the program goes large(or have more than one classes), I don’t think it is wise to do so. So I really want to make it clear where I made the mistake.
For example, CLASS FullIFDuplica has a memember method “bool isTwowayBranch()”, whose implemention is in ClassImplement.cpp. Then if this method is called in FullIFDuplica.cpp, error occurs.
opt: relocation error: /home/snir/jingyu/resources/llvm/JingProject/IFDup/Debug/
lib/FullIFDuplica.so.0: undefined symbol: _ZN46_GLOBAL__N_FullIFDuplica.cpp_9D21
I find that the symbol table of the generated library has two entrys for this method.
One is defined, the other is not. Seems that the run time has no way to associate these two symbols.
Could you tell me how to solve the problem?
Thanks very much!