在Qt中将.so库包含到另一个库中

时间:2014-05-27 13:24:10

标签: qt shared-libraries

我尝试将一个动态库(.so)包含到另一个中。比我把第一个库包含到app中。 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 += \ 
    ...

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

你的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刷新库缓存。缺点是,你需要root和杂乱的系统库目录。
  • 将libConvereter.so所在的目录添加到/etc/ld.so.conf(或者最好添加到/etc/ld.so.conf.d下的新文件中),然后运行ldconfig刷新库缓存。不足之处在于,您需要root和杂乱的系统配置。