【问题标题】:Include .so library into another in Qt将 .so 库包含到 Qt 中的另一个库中
【发布时间】:2014-05-27 13:24:09
【问题描述】:

我尝试将一个动态库(.so) 包含到另一个中。比我将第一个库包含到应用程序中。 TDS-Converter/Converter 是带有源代码的目录。使用此配置,当尝试通过 undefined reference to 调用第二个库的任何函数时出现错误。

QT -= gui
TEMPLATE = lib

unix {
    DEPENDPATH += . ../../TDS-Converter/Converter
    INCLUDEPATH +=  ../../TDS-Converter/Converter
    LIBS += ../../TDS-Converter/Converter/Converter -lConverter
}
win32 {
}

SOURCES += main.cpp\
   ...

HEADERS += \ 
    ...

如何解决这个问题?

【问题讨论】:

    标签: qt shared-libraries


    【解决方案1】:

    你的LIBS好像错了,应该是

    LIBS += -L../../TDS-Converter/Converter/Converter -lConverter
    

    ...并仔细检查文件是否真的是这样,如果不是,请修复:

    ../../TDS-Converter/Converter/Converter/libConverter.so


    如果您在谈论运行时,请继续阅读:

    其他库没有“包含”在您的库中,它由您的库使用。所以它需要在运行时可用。快速修复,在运行使用您的库的应用程序时,将LD_LIBRARY_PATH environment variable 设置为../../TDS-Converter/Converter/Converter 目录。

    LD_LIBRARY_PATH 环境变量的替代品是

    • 使用rpath,它将首选库搜索路径放入可执行文件中。缺点是,这需要在编译时决定。
    • 将 libConverter.so 复制到当前系统的某个包含目录,并运行ldconfig 以刷新库缓存。缺点是,您需要根目录和杂乱的系统库目录。
    • 将libConvereter.so所在的目录添加到/etc/ld.so.conf(或者最好添加到/etc/ld.so.conf.d下的新文件),然后运行ldconfig刷新库缓存。缺点是,您需要 root 和混乱的系统配置。

    【讨论】:

      猜你喜欢
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多