linux 交叉编译 静态库,在ARM交叉编译时,如何选择要链接的静态库?

小编典典

您有两种选择,

获取正确的编译器。

编写自己的“ C”库。

获取正确的编译器。

你是 总是 最安全的有一个编译器匹配您的系统。这适用于x86

Linux和各种发行版。如果不同的编译器可以工作,您将很幸运。当您交叉编译时,这样做会更加困难,因为编译器通常不会自动同步。尝试在2014

Ubuntu系统上编译的1999 x86 Mandrake Linux上运行程序。

除了指令兼容性(您已确定)外,还存在ABI和OS依赖性。具体来说, armv7 最有可能是 硬 浮点 (具有 浮点FPU

和注册调用约定),您需要 软浮点 (模拟的FPU)。特定的 glibc (或 ucLibc )具有Linux操作系统的特定调用和期望。例如,

线程的 工作方式已经随着时间而改变。

自己写

您可以随时使用-fno-builtin和-ffreestanding以及-static。然后,您将无法使用任何 libc

函数,但可以自行编程。

有外部资源,例如Mark

Martinec的snprintf和write()易于实现的构建基块,

#define _SYS_IOCTL_H 1

#include

#include

static inline int write(int fd, void *buf, int len)

{

int rval;

asm volatile ("mov r0, %1\n\t"

"mov r1, %2\n\t"

"mov r2, %3\n\t"

"mov r7, %4\n\t"

"swi #0\n\t"

"mov %0, r0\n\t"

: "=r" (rval)

: "r" (fd),

"r" (buf),

"r" (len),

"Ir" (__NR_write)

: "r0", "r1", "r2", "r7");

return rval;

}

static inline void exit(int status)

{

asm volatile ("mov r0, %0\n\t"

"mov r7, %1\n\t"

"swi #0\n\t"

: : "r" (status),

"Ir" (__NR_exit)

: "r0", "r7");

}

您必须添加自己的启动机制,由“ C”库负责,

/* Called from assembler startup. */

int main (int argc, char*argv[])

{

write(STDOUT, "Hello world\n", sizeof("Hello world\n"));

return 0;

}

/* Wrapper for main return code. */

void __attribute__ ((unused)) estart (int argc, char*argv[])

{

int rval = main(argc,argv);

exit(rval);

}

/* Setup arguments for estart [like main()]. */

void __attribute__ ((naked)) _start (void)

{

asm(" sub lr, lr, lr\n" /* Clear the link register. */

" ldr r0, [sp]\n" /* Get argc... */

" add r1, sp, #4\n" /* ... and argv ... */

" b estart\n" /* Let's go! */

);

}

如果这太令人生畏,因为您需要实现很多功能,那么您可以尝试获取各种库源并使用它们进行重建,-fno-

builtin并确保这些库不会与不兼容的Ubuntu库链接。

诸如crosstool-ng之类的项目可以使您构建完全适合 armv5

系统的正确编译器(也许使用更高级的代码生成)。这看起来似乎很痛苦,但是上面的替代方法也不容易。

2020-06-02

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266225.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python输出可执行文件_重定向-禁止在Python调用中输出可执行文件

重定向-禁止在Python调用中输出可执行文件我有一个名为B的二进制文件,该文件在调用时会生成输出。 如果从Bash shell调用它,则大多数输出将受到A > /dev/null的抑制。所有输出将受到A &> /dev/null的抑制我有一个名为B的Python脚本&#xff0c…

全国计算机等级考试题库二级C操作题100套(第80套)

第80套: 给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。 例如,从主函数输入一个整数:27638496&#x…

记一次B站答题经历

第一题部分:社区规范卷 --------- ------------ 第二题:社区规范第二部分 -------------------- 第三部分自由选择题 ---------------------- -------------------------------- 最后答题成绩得分 -------------- ------------- 答完题后的感受&#xff…

linux 安装程序丢失链接动态库,Linux安装软件过程中提示缺少动态链接库.so的解决方法...

Linux在安装软件的时候有时会出现错误,提示缺少动态链接库.so,该问题是由什么原因导致的呢?情况分析:1.缺少动态连接库.so-cannot open shared object file:No such file or directory2.缺少动态连接库.so.0-cannot open shared object file…

全国计算机等级考试题库二级C操作题100套(第81套)

第81套: 给定程序中,函数fun的功能是:在形参s所指字符串中的每个数字字符之后插入一个号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:def35adh3kjsdf7*。 请在程序的下划线处填入正确的内容并…

菜鸟python爬虫_Python爬虫学习-基础爬取

编译环境:python v3.5.0, mac osx 10.11.4第三方库:针对网页解析,python有丰富的第三方库如:BeautifulSoup, urllib, requests etc.可以通过import来引入指定第三方库,通过from lib import function导入第三方库中的指定函数。如&…

点云赋值 PointCloudT::Ptr 运行时崩溃

PointCloudT::Ptr cloud; cloud.reset(new PointCloudT); cloud->points.resize(500);for(int index 0;index <500;index){  cloud->point[index].x 1.0; cloud->point[index].y 1.0;}采用以上方式赋值程序崩溃。Point t; for(int index 0;index <500;ind…

yaf(5) smarty

2013年4月6日 13:41:37 参考: http://www.oschina.net/question/812776_71817 http://yaf.laruence.com/manual/yaf.class.dispatcher.setView.html 这两者都是在bootstrap.php中写_initSmarty()函数来重新实现yaf的视图接口 这中方案默认的是存放模版文件的上级文件夹名字必须…

全国计算机等级考试题库二级C操作题100套(第82套)

第82套&#xff1a; 给定程序中&#xff0c;函数fun的功能是&#xff1a;找出100&#xff5e;999之间&#xff08;含100和999&#xff09;所有整数中各位上数字之和为x&#xff08;x为一正整数&#xff09;的整数,然后输出&#xff1b;符合条件的整数个数作为函数值返回。 例如…

linux最小安装桌面,Linux工作环境:CentOS7最小安装+Xfce桌面环境

ref: https://blog.csdn.net/smstong/article/details/448029893.1 执行CentOS7 最小安装去官网下载CentOS-7.0-1406-x86_64-Minimal.iso&#xff0c;然后刻录光盘&#xff0c;安装之。安装完成后执行yum update更新系统。然后&#xff0c;执行# yum install epel-release安装额…

python自动获取cookie_selenium3+python自动化12-cookie相关操作(获取和删除)

前言在进行接口测试或者自动化测试时&#xff0c;有时就要登录好多次&#xff0c;特别麻烦&#xff0c;那能不能不要一遍一遍输入账号&#xff0c;直接跳过登录页面进行操作。这个时候就要用到cookie&#xff0c;这次主要整理cookie的一些操作&#xff0c;包含获取cookie、删除…

Hibernate(三) - hibernate 表操作-多对多配置

Hibernate 的一对多关联映射 之前在学习 Hibernate 的时候&#xff0c;其实都是单表的操作。在实际的开发当中&#xff0c;比如做一个商城&#xff0c;就需要好多张数据库表&#xff0c;表与表之间是有关系的。之前些做一些关联查询或者是一些基本的查询操作的时候&#xff0c;…

linux怎么用命令备份数据库,使用linux的mysqlhotcopy命令备份数据库

使用linux的mysqlhotcopy命令备份数据库发布时间&#xff1a;2020-07-22 11:18:37来源&#xff1a;亿速云阅读&#xff1a;66作者&#xff1a;清晨栏目&#xff1a;服务器这篇文章将为大家详细讲解有关使用linux的mysqlhotcopy命令备份数据库&#xff0c;小编觉得挺实用的&…

全国计算机等级考试题库二级C操作题100套(第83套)

第83套&#xff1a; 给定程序中&#xff0c;函数fun的功能是&#xff1a;找出100至x&#xff08;x≤999&#xff09;之间各位上的数字之和为15的所有整数&#xff0c;然后输出&#xff1b;符合条件的整数个数作为函数值返回。 例如&#xff0c;当n值为500时&#xff0c;各位数…

vb treeview 展开子节点_详解最长公共子序列问题,秒杀三道动态规划题目

学算法认准 labuladong后台回复进群一起力扣?读完本文&#xff0c;可以去力扣解决如下题目&#xff1a;1143.最长公共子序列(Medium)583. 两个字符串的删除操作(Medium)712.两个字符串的最小ASCII删除和(Medium)好久没写动态规划算法相关的文章了&#xff0c;今天来搞一把。不…

TZOJ 4621 Grammar(STL模拟)

描述 Our strings only contain letters(maybe the string contains nothing). Now we define the production as follows: 1. (C) --> C 2. C --> C 3. (C:num)-->repeat C num times. Illustration: (C) or C stands for a string only contains letters. (C:num) m…

[链接]Python中的metaclass、装饰器

深刻理解Python中的元类(metaclass) Python装饰器学习&#xff08;九步入门&#xff09;

linux查看数据积压,查看kafka消息队列的积压情况

创建topickafka-topics --create --zookeeper master:2181/kafka2 --replication-factor 2 --partitions 3 --topic mydemo5列出topickafka-topics --list --zookeeper master:2181/kafka2描述topickafka-topics --describe --zookeeper master:2181/kafka2 --topic mydemo5生产…

全国计算机等级考试题库二级C操作题100套(第84套)

第84套&#xff1a; 函数fun的功能是&#xff1a;从三个形参a&#xff0c;b&#xff0c;c中找出中间的那个数&#xff0c;作为函数值返 回。 例如&#xff0c;当a3, b5, c4时&#xff0c;中数为4。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注…

python 三引号_Python 基础(一):入门必备知识

目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级1 标识符标识符是编程时使用的名字&#xff0c;用于给变量、函数、语句块等命名&#xff0c;Python 中标识符由字母、数字、下划线组成&#xff0c;不能以数…