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

Jing Yu jingyuuiuc at gmail.com
Fri May 19 02:32:46 PDT 2006


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20060519/e54ed946/attachment.html>


More information about the llvm-dev mailing list