QNX系统中添加自己编译的.so库

时间:2024-03-21 11:23:11
将自己编译生成的动态链接库文件打包到QNX系统中,主要修改的是打包所依赖的build配置文件。默认情况下,mkifs会根据build文件中所声明的库和脚本来生成系统bin文件;在解释build时会根据之前主机上的环境变量搜索指定的路径,当我们的so文件的路径不在环境变量所定义的路径中时,我们就需要显示的指定我们的so库的文件位置。

一般情况下,build的默认搜索路径是从install/${CPU_TYPE}/lib/dll路径下搜索的,所以如果用户编译生成的动态库默认是放在这个路径下的话,我们便不需要显示的包含文件路径。直接在build文件中写明so文件名即可。但若不是在该路径下,那就要需要写明文件文件路径。如下:

QNX系统中添加自己编译的.so库

截图中的screen-gles2.so以及下面的所有动态库会默认从install/armle-v7/lib/dll和install/armle-v7/lib下查找,如果没有对应的so库,则从开发环境的库中查找,默认都是QNX官方提供的库,其功能都很基础和有限。

[-followlink search=${QNX_TARGET}/${PROCESSOR}] /usr/lib/graphics/iMX6X=usr/lib/graphics/iMX6X表示将从qnx的SDK下的amle-v7路径下的usr/lib/graphics/iMX6X文件夹拷贝到设备上的/usr/lib/graphics/iMX6X之中。当我们的设备起来之后,我们该路径下就可以看到该iMX6X目录下的文件是和SDK的文件是一样的。

当我们要修改了部分代码后,不使用其开发环境提供的库时:我们就要修改build文件,修改方法如下:(以libwfdcfg-imx6x-hdmi.so为例)
1、首先查看编译生成libwfdcfg-imx6x-hdmi.so的代码所依赖的makefile文件,可以知道生成该so的文件路径。如:

QNX系统中添加自己编译的.so库

该INSTALLDIR变量指明了编译结果所在的目录。上图可知我们生成的so文件最后是放在/install/armle-v7/usr/lib/graphics/iMX6X/ 下

2、修改build文件,将上述查找到的so文件添加到build之中:
/usr/lib/graphics/iMX6X/libwfdcfg-imx6x-hdmi.so=../install/armle-v7/usr/lib/graphics/iMX6X/libwfdcfg-imx6x-hdmi.so
由于sabreARD-graphics.build是存放在image目录下的,所以我们要先使用..来返回到根目录后再进入到各个子目录下。
上述等号的前面表示设备上的文件路径,如果不指定的话,默认是放置在设备上的/proc/boot/目录下的。
经过以上修改之后我们便可以在设备上使用我们自己的so库了。

也有一种简单的改法,就是修改编译so时用到的makefile文件,将其编译生成的so输出到系统的搜索路径中,这样我们就不需要在build文件中指定so的路径了,修改如下:

将上述makefile中的INSTALLDIR变量注释起来,这样生成的so的默认路径是:/install/armv7-le/lib/dll/下。build修改如下:
/usr/lib/graphics/iMX6X/libwfdcfg-imx6x-hdmi.so=libwfdcfg-imx6x-hdmi.so


#create a symlink called ldqnx.so.2 to it(libc.so)
[type=link] /usr/lib/ldqnx.so.2=/proc/boot/libc.so
type=link 表示创建一个符号链接 由ldqnx.so.2-->libc.so