【问题标题】:Unable to pass -shared argument to g++ using libtool无法使用 libtool 将 -shared 参数传递给 g++
【发布时间】:2019-10-17 15:08:30
【问题描述】:

我正在尝试使用 libtool 编译共享对象。

当我这样运行 libtool 命令时:

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

它调用 g++ 如下:

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

这会产生以下错误:

/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

但是,当我像这样调用 g++ 时(注意末尾的 -shared 选项):

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

我的共享对象已成功创建。我无法通过 libtool 将 -shared 参数传递给 g++。我怎样才能做到这一点?

【问题讨论】:

    标签: c++ gcc g++ libtool


    【解决方案1】:

    -Xcompiler -shared 添加到 libtool 有效。

    /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 
    

    这会使用 -shared 参数运行 g++

     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
    

    【讨论】:

      【解决方案2】:

      您可以使用-Xcompiler <parameter> 直接将参数传递给编译器。正如您已经发现的那样,-Xcompiler -shared 将处理您的情况。

      参考文档: https://www.gnu.org/software/libtool/manual/html_node/Compile-mode.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-15
        • 2015-11-11
        • 2020-05-15
        • 2015-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多