V2EX alphaprogrammer
 alphaprogrammer 最近的时间轴更新
alphaprogrammer

alphaprogrammer

V2EX 第 249674 号会员,加入于 2017-08-19 22:09:50 +08:00
alphaprogrammer 最近回复了
说一下情况,就是原本写的代码时基于 x86 的,现在需要在 arm 上跑,依赖于一些第三方库(在目标机上可以直接 apt 安装)。目前由于没有 arm 环境,只能在 x86 上使用交叉编译的方式编译出 arm 可执行程序,第三方库依赖采用 dlopen 的方式去除依赖。(如果能下载 arm 版的第三方库 binary,也可以直接编译的)

目前我的实现方式有点取巧,个人感觉实现方式不太好。

首先,之前实现的代码都定义在一个 namespace A 下,
假定依赖一个 func_b,其类型为 type_func_b, 在 namespace A 下定义一个 type_func_b 的变量 func_b,变量名与函数名相同,通过__attribute__(constructor)初始化 func_b 变量,指向第三方库中的函数符号。

这样以前的代码基本不需要改,只需要根据编译 include 一个头文件即可。
有一个缺点就是必须定义在同一个 namespace 下,否则变量 func_b 会与第三方库中的函数声明冲突
@ysc3839 -_-!! 对 window 不了解,没接触过。
@hitmanx 目前在这方面尝试,dlopen 之类的壳代码不知道有没有什么方法能自动生成的
@augustheart 版本确实是一个问题,但是动态链接一样会碰到版本问题,这个是 code 应该做兼容处理的
@SPACELAN 依赖库不由我提供, 直接从特定源下载即可
@ai277014717 gcc/g++ 有这个编译选项吗?
@chinuno 这个思路不错,之前的代码可以原封不动,不用改
@littlewing 这个我知道,现在就是需要编译可执行文件
@hitmanx 目前是在这方面想,但是我希望是 动态链接的方式和 dlopen 的方式能随意切换
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     888 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 18ms UTC 19:50 PVG 03:50 LAX 12:50 JFK 15:50
Do have faith in what you're doing.
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86