问题表现:
CANNOT LINK EXECUTABLE “/vendor/bin/xxx”: library “libxxx.so” not found
功能需求:
在libtinyalsa.so里面添加部分功能代码,同时写了一个服务程序/vendor/bin/yuerin依赖libtinyalsa.so
libtinyalsa.so的默认编译规则:
cc_library {
name: "libtinyalsa",
host_supported: true,
vendor_available: true,
vndk: {
enabled: true,
},
/********其它********/
}
添加的/vendor/bin/yuerin编译规则:
cc_library {
name: "yuerin",
host_supported: true,
vendor_available: true,
//vndk: {
// enabled: true,
//}, //这部分放开无法编译通过,原因初步看与libtinyalsa冲突,所以去掉了
/********其它********/
}
按上面的编译规则分别编译出如下文件:
/system/lib/libtinyalsa.so
/system/bin/yuerin
/vendor/bin/yuerin
所需要的程序为/vendor/bin/yuerin
在x86模拟器条件下运行/vendor/bin/yuerin是正常的,未出现异常,
在arm开发板上运行/vendor/bin/yuerin却不正常,报错如下:
CANNOT LINK EXECUTABLE “/vendor/bin/xxx”: library “libxxx.so” not found
从字面上看,是/vendor/bin/xxx程序无法访问到libxxx.so,有点神奇,同样的代码,在不同的平台表现竟然不一样。
查询了一些资源找到了解决办法,参考链接
1、将新添加的代码从libtinyalsa.so中分离出来,主要是服务部分,创建一个asla服务库。
2、将服务库及服务程序编译规则按vendor独占方式编译:如下
cc_binary {
name: “yuerinserver”,
proprietary: true, //关键参数,决定资源由vendor独占
/其它*/
}
cc_binary {
name: “libalsa”,
proprietary:true, /关键参数,决定资源由vendor独占/
/其它*/
}