广州 网站备案,青岛做网站的公司有哪些,柬埔寨网站建设运营维护,淘宝客网站返利程序使用vs编译so库#xff0c;很多复用的cpp文件在不同的so中#xff0c;调用这些so的时候会有崩溃等等各种问题#xff0c;就是因为虽然复用了接口#xff0c;但是内部实现不完全相同#xff0c;而Linux使用接口又与windows不一样#xff0c;导致不是理想状态使用自己库中的…使用vs编译so库很多复用的cpp文件在不同的so中调用这些so的时候会有崩溃等等各种问题就是因为虽然复用了接口但是内部实现不完全相同而Linux使用接口又与windows不一样导致不是理想状态使用自己库中的函数接口一个简单的解决办法使用显示指定接口-Wl,--retain-symbols-file/home/projects/$(ProjectName)/retain_symbols.sys -Wl,--version-script/home/projects/$(ProjectName)/version_script.map这两个文件里的内容也很简单
retain_symbols.sys
Test_api1
Test_api2
version_script.map:
{
global:Test_api1;Test_api2;
local: *;
};
基本这样就可以解决问题了不用去挨个改接口名字了。
还有一种是用-fvisibilityhidden的方式在代码级别就做出变动我还没有尝试过。
更新还有一个办法是研究android studio编译库冲突时发现的使用-Wl,-Bsymbolic参数限定库优先使用内部函数在ld报错时查找到的http://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_node/ld_3.html ld的参数说明也是看了这个参数说明才知道上面的指定函数接口的参数与-s、-Sstrip的使用是冲突的。