[LLVMdev] Pass options to the linker

Jorge A. Navas navas at comp.nus.edu.sg
Tue Nov 15 23:20:59 PST 2011


Solved the problem.

I was adding -lppl and -lgmp using 
the variable LD.Flags rather than LIBS in the Makefile.

Thanks!

Jorge

On Tuesday, November 15, 2011 at 10:54:09 (+0100), Jorge A. Navas wrote:
>> On Tuesday, November 15, 2011 at 10:11:25 (+0100), Duncan Sands wrote:
>> >> Hi Jorge,
>> >> 
>> >> > I'm trying to use the PPL (Parma Polyhedra Library,
>> >> > bugseng.com/products/ppl) in one of my LLVM passes getting the error:
>> >> >
>> >> >> Error opening
>> >> >> '/home/jorge/SvnReps/Systems/llvm/build/Debug+Asserts/lib/MyAnalysis.so':
>> >> >> /home/jorge/SvnReps/Systems/llvm/build/Debug+Asserts/lib/MyAnalysis.so:
>> >> >> undefined symbol: _ZNK23Parma_Polyhedra_Library13PIP_Tree_Node2OKEv
>> >> >> -load request ignored.
>> >> 
>> >> was MyAnalysis.so linked with the PPL library?  Run
>> >>    ldd MyAnalysis.so
>> >> to see what it was linked with.
>> >> 
>> 
>> Not ;-( the output of ldd MyAnalysis.so is:
>> 
>> 	linux-gate.so.1 =>  (0xb78ce000)
>> 	libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb7897000)
>> 	libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb77ac000)
>> 	libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb778d000)
>> 	libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7611000)
>> 	/lib/ld-linux.so.2 (0xb78cf000)
>> 	libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb75e7000)
>> 
>> So I guess, my problem is in LD.Flags ?
>> 
>> >> LEVEL=../../../..
>> >> LIBRARYNAME=MyAnalysis
>> >> LOADABLE_MODULE=1
>> >> SHARED_LIBRARY=1
>> >> include $(LEVEL)/Makefile.common
>> >> 
>> >> # These two lines are new:
>> >> CXX.Flags += -I/home/jorge/include -fexceptions -Wno-variadic-macros
>> >> LD.Flags  += -L/home/jorge/lib -lppl -lgmp
>> 
>> 
>> 
>> >> Ciao, Duncan.
>> >> 
>> >> >
>> >> > Let me explain how I get to this point.
>> >> >
>> >> > To make simpler my explanation I took the "Hello World" pass provided
>> >> > in the directory llvm/lib/Transforms/Hello/Hello.cpp.
>> >> >
>> >> > I compiled Hello.cpp using the Makefile:
>> >> >
>> >> >> LEVEL=../../../..
>> >> >> LIBRARYNAME=MyAnalysis
>> >> >> LOADABLE_MODULE=1
>> >> >> SHARED_LIBRARY=1
>> >> >> include $(LEVEL)/Makefile.common
>> >> >
>> >> > and then:
>> >> >
>> >> > clang test.c -c -emit-llvm -o test.bc
>> >> > opt -load /home/jorge/SvnReps/Systems/llvm/build/Debug+Asserts/lib/MyAnalysis.so -hello -stats test.bc
>> >> >
>> >> >> Hello: modulo
>> >> >> ===-------------------------------------------------------------------------===
>> >> >>                            ... Statistics Collected ...
>> >> >> ===-------------------------------------------------------------------------===
>> >> >> 1 hello - Counts number of functions greeted
>> >> >
>> >> > So far, so good. No compiler/linker errors and I get the expected
>> >> > output.
>> >> >
>> >> > Now, in order to use PPL from my Hello pass I just need (based on PPL
>> >> > documentation) to add in Hello.cpp the header:
>> >> >
>> >> > #include<ppl.hh>
>> >> >
>> >> > and then I modify the above Makefile as follows:
>> >> >
>> >> >> LEVEL=../../../..
>> >> >> LIBRARYNAME=MyAnalysis
>> >> >> LOADABLE_MODULE=1
>> >> >> SHARED_LIBRARY=1
>> >> >> include $(LEVEL)/Makefile.common
>> >> >
>> >> >> # These two lines are new:
>> >> >> CXX.Flags += -I/home/jorge/include -fexceptions -Wno-variadic-macros
>> >> >> LD.Flags  += -L/home/jorge/lib -lppl -lgmp
>> >> >
>> >> > Then, it's when I get the above error:
>> >> >
>> >> >> Error opening
>> >> >> '/home/jorge/SvnReps/Systems/llvm/build/Debug+Asserts/lib/MyAnalysis.so':
>> >> >> /home/jorge/SvnReps/Systems/llvm/build/Debug+Asserts/lib/MyAnalysis.so:
>> >> >   >undefined symbol: _ZNK23Parma_Polyhedra_Library13PIP_Tree_Node2OKEv
>> >> >
>> >> > It's important to mention that I can compile/link programs with the
>> >> > header "#include<ppl.hh>" without any problem using the command:
>> >> >
>> >> > g++ test.c -L/home/jorge/lib -lppl -lgmp -o test
>> >> >
>> >> > I guess the problem is how I pass the flags to the linker.  Does
>> >> > anybody have a clue what I'm doing wrong?
>> >> >
>> >> > Thanks!
>> >> >
>> >> > Jorge
>> >> >
>> >> >
>> >> > _______________________________________________
>> >> > LLVM Developers mailing list
>> >> > LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> >> > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>> >> 
>> >> _______________________________________________
>> >> LLVM Developers mailing list
>> >> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev



More information about the llvm-dev mailing list