Linux笔记-so.1和so的区别(三方程序链接Qt的so.1和so)

如下面这个程序使用ldd查看下:

从中可以看到一些so.6和so.1这些,这些其实是版本号,比如这个:/lib64/libstdc++.so.6

 可见so.版本号其实是个软连接,最终会连接到/lib64/libstdc++.so.6.0.19

而C++Qt框架写的lib如下pro文件会生生成4个so,make后,就可以看到其实有3个是执行那1个的软连接

DEFINES += APP
#DEFINES += LIB


QT += core
QT -= gui

CONFIG += c++11

TARGET = XXXLib
CONFIG += console
CONFIG -= app_bundle

QMAKE_CXXFLAGS += -fpermissive

contains(DEFINES, APP){

    SOURCES += main.cpp

    TEMPLATE = app
    QMAKE_POST_LINK += scp programName [email protected]:/root/bin
}
else{

    TEMPLATE = lib
    DEFINES += LIBXXX_LIBRARY
    HEADERS += libXXX_global.h
}


SOURCES +=  ......    \
            ......    \
            ......

unix{

INCLUDEPATH += ......    \
                ......    \
                ......

LIBS += -L/XXXX/XXXX/XXXX/XXXX-lxxxx_lib -lxxxx_lib -lxxxx_lib 

}


DEFINES += QT_DEPRECATED_WARNINGS



HEADERS += ......    \
            ......    \
            ......    \
            ......

如下命令:

ln -s libXXXLib.so.1.0.0 libXXXLib.so
ln -s libXXXLib.so.1.0.0 libXXXLib.so.1
ln -s libXXXLib.so.1.0.0 libXXXLib.so.1.0

 如果是这样的,那么需要把这些都拷贝到对应的lib目录下,其他程序调用的时候一般不会直接链接到libXXXLib.so,会链接到so.版本号的程序所以有时就会出现error while loading shared libraries .... not found。

如果不需要Qt生成版本控制,只要单独的so,在pro文件中添加:

CONFIG += plugin

即可。

再说明下,如果有个程序,能跑,有源码,没有文档。

领导让你从中扣出某个功能,再进行一些业务操作,变成新的程序,而要扣的某些功能,有的用了公司其他人开发的so。

可以从以下2个方面入手:

①查看makefile,把链接到的so和include直接写到新项目中;

②使用ldd,查看程序链接到哪些dll,在国内,写的so一般都没有版本号,没有链到版本号的so要特别注意;

最后屁股能坐得住椅子,慢慢测。

猜你喜欢

转载自blog.csdn.net/qq78442761/article/details/131055873
so
SO?
今日推荐