Search code examples
c++gccg++libtool

Unable to pass -shared argument to g++ using libtool


I am trying to compile a shared object using libtool.

When I run the libtool command as this:

g++ -g -O2 -fPIC -Wl,--rpath -Wl,/opt/labris/lib/labris-lupd -o simple_text.so SimpleTextPlugin.o SimpleTextAdaptor.o SimpleTextVersionController.o FileHash.o FDiff.o FPatch.o  -L/opt/labris/lib/labris-lupd /opt/labris/lib/labris-lupd/liblupdutils.so /opt/labris/lib/labris-lupd/liblupdipc.so -lssl -Wl,-rpath -Wl,/opt/labris/lib/labris-lupd -Wl,-rpath -Wl,/opt/labris/lib/labris-lupd

It invokes g++ as the following:

libtool: link: g++ -g -O2 -fPIC -Wl,--rpath -Wl,/opt/labris/lib/labris-lupd -o simple_text.so SimpleTextPlugin.o SimpleTextAdaptor.o SimpleTextVersionController.o FileHash.o FDiff.o FPatch.o  -L/opt/labris/lib/labris-lupd /opt/labris/lib/labris-lupd/liblupdutils.so /opt/labris/lib/labris-lupd/liblupdipc.so -lssl -Wl,-rpath -Wl,/opt/labris/lib/labris-lupd -Wl,-rpath -Wl,/opt/labris/lib/labris-lupd

This produces the following error:

/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status

However when I invoke g++ like this with (Notice the -shared option at the end):

g++ -g -O2 -fPIC -Wl,--rpath -Wl,/opt/labris/lib/labris-lupd -o simple_text.so SimpleTextPlugin.o SimpleTextAdaptor.o SimpleTextVersionController.o FileHash.o FDiff.o FPatch.o  -L/opt/labris/lib/labris-lupd /opt/labris/lib/labris-lupd/liblupdutils.so /opt/labris/lib/labris-lupd/liblupdipc.so -lssl -Wl,-rpath -Wl,/opt/labris/lib/labris-lupd -Wl,-rpath -Wl,/opt/labris/lib/labris-lupd -shared

My shared object is succesfully created. I haven't been able to pass the -shared argument to g++ via libtool. How can I accomplish this?


Solution

  • Adding -Xcompiler -shared to libtool worked.

    /usr/bin/libtool --tag=CXX --mode=link g++ -g -O2 -fPIC -Wl,--rpath -Wl,/opt/labris/lib/labris-lupd -L/opt/labris/lib/labris-lupd -Xcompiler -shared  -o simple_text.so SimpleTextPlugin.o SimpleTextAdaptor.o SimpleTextVersionController.o FileHash.o FDiff.o FPatch.o -lssl -llupdutils -llupdipc 
    

    This runs g++ with -shared argument

     g++ -g -O2 -fPIC -Wl,--rpath -Wl,/opt/labris/lib/labris-lupd -shared -o simple_text.so SimpleTextPlugin.o SimpleTextAdaptor.o SimpleTextVersionController.o FileHash.o FDiff.o FPatch.o  -L/opt/labris/lib/labris-lupd /opt/labris/lib/labris-lupd/liblupdutils.so /opt/labris/lib/labris-lupd/liblupdipc.so -lssl -Wl,-rpath -Wl,/opt/labris/lib/labris-lupd -Wl,-rpath -Wl,/opt/labris/lib/labris-lupd