help! How to build a shared library out of multiple cpp files in LLVM?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

help! How to build a shared library out of multiple cpp files in LLVM?

Jing Yu-2
Hi guys,

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
64D3_FF44884A20FullIFDuplica14isTwowayBranchEPN4llvm10BasicBlockE

 I find that the symbol table of the generated library has two entrys for this method.
(U).....FullIFDuplica.cpp_9D2164D3_FF44884A20FullIFDuplica14isTwowayBranch..
  and
(T).....ClassImplement.cpp_9D2164D3_FF44884A20FullIFDuplica14isTwowayBranch..

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!

Jing

_______________________________________________
LLVM Developers mailing list
[hidden email]         http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev