问题描述:
代码工程中应用App1依赖Lib1编的动态库(.so),Lib1编译依赖第三方动态库SharedLibB.so,在编译整个工程编译时,报:xx.so,not found(try using -rpath or -rpath-link)
undefined refrence to xxxxxFunc1 (注意:为SharedLibB.so中的防范)
undefined refrence to xxxxxFunc1 (注意:为SharedLibB.so中的防范)
...
解决方案:
1、确保工程的配置文件中(QT为xx.pro)配置好lib依赖关系和路径,SharedLibB.so相关的库和头文件已放到依赖路径下。
2、Lib1中添加依赖配置,App1的配置文件(QT为xx.pro)中除了说明Lib1的依赖关系之外,还要添加SharedLibB.so的依赖关系和路径。
说明:
其中第2点需要注意,QtCreator和VS编译的配置说明依赖关系不一致,这也是我为什么出现这个问题的原因。
VS中,App1依赖Lib1,Lib1依赖SharedLibB,编译时只需要Lib1配置SharedLibB编译关系,App1配置Lib1编译关系,即可编译通过,特别时windows应用(lib和dll)。运行时将动态库(.so或者dll)放到运行路径即可。
QtCreator中,动态库编译关系,App1依赖Lib1,Lib1依赖SharedLibB,编译时需要Lib1配置SharedLibB编译关系,App1配置Lib1和SharedLibB编译关系,才可编译通过。