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   ·   实用小工具   ·   5409 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 24ms · UTC 08:38 · PVG 16:38 · LAX 00:38 · JFK 03:38
Developed with CodeLauncher
♥ Do have faith in what you're doing.