相关疑难解决方法(0)

70
推荐指数
2
解决办法
6万
查看次数

GCC创建共享对象而不是可执行二进制文件

我有一个正在建设的图书馆.当我运行以下任何一个时,我的所有对象都会连续编译和链接: ar rcs lib/libryftts.a $^

gcc -shared $^ -o lib/libryftts.so

在我的Makefile中.我也能够成功安装它们/usr/local/lib 当我用nm测试文件时,所有的功能都在那里.我的问题是,当我跑步gcc testing/test.c -lryftts -o test && file ./testgcc testing/test.c lib/libryftts.a -o test && file ./test 它说:

test: ELF 64-bit LSB shared object而不是test: ELF 64-bit LSB executable像我期望的那样.我究竟做错了什么?

c gcc shared-libraries static-libraries

22
推荐指数
2
解决办法
1万
查看次数

ARM汇编中ADRP和ADRL指令的语义是什么?

ADRP

PC相对偏移量的4KB页面地址.

ADRL

将PC相关地址加载到寄存器中.它类似于ADR指令.ADRL可以加载比ADR更广泛的地址,因为它生成两个数据处理指令.

特别,

ADRL汇编为两条指令,ADRP后跟ADD.如果汇编程序无法在两条指令中构造地址,则会生成重定位.然后链接器生成正确的偏移量.ADRL生成与位置无关的代码,因为地址是相对于PC计算的.

做什么ADRPADRL说明做什么?更重要的是,如何与ADRP后面的ADD结构与PC相关的地址?

assembly arm opcode

9
推荐指数
1
解决办法
5158
查看次数

标签 统计

gcc ×2

arm ×1

assembly ×1

c ×1

linker ×1

opcode ×1

shared-libraries ×1

static-libraries ×1