【问题标题】:Using libtool to link against non-libtool libraries使用 libtool 链接非 libtool 库
【发布时间】:2013-12-21 15:26:42
【问题描述】:

我有一个使用 autotools 建立的项目来构建一个 C++ 库,其中包括与 Boost.Python 的 Python 绑定。 我的系统上有一个 Boost.Python 二进制文件,我想链接:

/usr/lib/libboost_python-py27.so.1.49.0

没有对应的 .la 文件,所以我想我可以将库的完整路径添加到类似于以下的 libtool 命令:

bash ./libtool --mode=link g++ -rpath /usr/local/lib src/o1.lo src/o2.lo ... \
     /usr/lib/libboost_python-py27.so.1.49.0 -o libNSM.la

但是 libtool 正在从发出的 g++ 命令中丢弃 /usr/lib/libboost_python-py27.so.1.49.0。如果我手动运行 g++ 就可以了。

我怎样才能让 libtool 使用本机共享库,或者什么是处理这种情况的正确方法。我绝对希望用户能够使用他们现有的 boost 二进制文件。

【问题讨论】:

    标签: c++ shared-libraries libtool


    【解决方案1】:

    我的系统上有一个 Boost.Python 二进制文件,我想链接到

    您是否安装了boost-devel 以将符号链接安装到/usr/lib/libboost_python-py27.so.1.49.0

    没有对应的.la文件

    libtool 不需要链接。如果安装了boost-devel-lboost_python-py27 可能就足够了。

    我怎样才能让 libtool 使用本机共享库,或者什么是处理这种情况的正确方法。我绝对希望用户能够使用他们现有的 boost 二进制文件。

    您可能想查看GNU Autoconf Archive 中的AX_BOOST_PYTHON 宏 帮助用户为libboost_python 设置所需的库(您可能需要的不仅仅是那里的特定宏)。 boost.m4 宏似乎也支持 python,并且应该提供类似的东西。

    【讨论】:

    • 我正在使用 AX_BOOST_PYTHON,它为我提供了 boost 库的路径(在我的例子中只是 /usr/lib)。但这不是升压问题,而是普遍问题。假设我在我的项目中使用了一个不受欢迎的库,而我的软件的用户只有一个共享库(不是 libtool,而只是 .so 文件)。如果 libtool 不接受非 libtool 库,他们如何构建项目?这样做的正确方法是什么?
    • 似乎没有办法将具有非标准文件名的库与 libtool 链接。库需要有文件结尾的 .so 或 .la。
    • Boost 开发包(例如boost-devlibboost-python1.49-dev)应提供指向共享库的符号链接(带有.so 扩展名)。
    • 同样,libtool 不需要 .la 文件来链接。如果.so 文件是平台上的共享库,libtool 会将其链接到常用的链接器选项-L-l
    • 是的,你是对的。 libtool 需要一个 .la.so 文件。但是给它一个带有另一个结尾的文件是行不通的(即使它可能是一个共享库并且 g++ 可以处理它)。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 2013-08-27
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多