ld相关内容
如果我想链接除 z.o 之外的所有 .o 文件,所有 .o(无 z.o)都重定位在 0xC0000000 而 z.o 位于 0xFFFF0000 但 z.o 位于文件偏移量 0x8000. 那么.如何编写这个ld脚本? 这是我的 loader.lds SECTIONS {加载器 0x00000000 : { start.o loader.o }kloader 0x30100000 :
..
这是我的问题.我有一个链接标准 arm7nommu-uClinux 内核的链接器脚本: OUTPUT_ARCH(arm)条目(文本)部分{.= 0x0;.vectors:{*(.resetvector)}.= 0x8000;.init : {/* 初始化代码和数据 */_stext = .;__init_begin = .;*(.text.init)__proc_info_begin = .;*
..
我正在努力理解如何让 ld(在 gcc arm 嵌入式工具包中)做我想做的事: 举个例子,我有几个要链接的 .o 文件.说我只想要一个名为 .foo 的部分在输出中.我把它放在命令文件 link.ld 中: SECTIONS{.foo : {*(.text)}} 然后去“ld -T link.ld file1.o fil2.o -o output.o" 然后我在 output.o
..
考虑下面的简单程序: __attribute__((weak)) void weakf(void);int main(int argc, char *argv[]){弱();} 当用 gcc 编译它并在 Linux PC 上运行它时,它会出现段错误.在 ARM CM0 (arm-none-eabi-gcc) 上运行时,链接器通过跳转到以下指令和 nop 替换未定义符号. 这种行为记录在哪
..
我为多个 CPU 编写了性能关键代码.我在运行时检测 CPU,并基于此为检测到的 CPU 使用适当的函数.所以,现在我必须使用函数指针并使用这些函数指针调用函数: void do_something_neon(void);void do_something_armv6(void);void (*do_something)(void);如果(CPU == 霓虹灯){do_something = d
..
我正在尝试使用 C 为 Nucleo-64 Stm32F401re 板编写裸机闪烁程序.然而,在开始调试错误时(它还没有闪烁),我发现了一个奇怪的地址,我没有找到任何解释.这是反汇编相关部分的输出: blink.elf:文件格式elf32-littlearm.text 节的反汇编:08000000 :8000000: 20018000 andcs r8, r1
..
我正在尝试升级到 yagarto4.7.2(对于那些想知道的人来说,又是一个 GNU ARM 工具链),这是为 Windows 移植的 gcc 和 binutils.但是,尝试编译一个简单的 Hello World 会产生: c:/yagarto-20121222/bin/../lib/gcc/arm-none-eabi/4.7.2/../../../../arm-none-eabi/bin/l
..
在创建裸机可执行文件时,我遇到了这个错误: main.o:(.eh_frame+0x1c): 重定位被截断以适应:R_AARCH64_PREL32 对 `.text'collect2:错误:ld 返回 1 个退出状态 然后我设法创建了一个最小的复制示例: main.c void _start(void) {} notmain.S .skip 32 link.ld ENTRY(_
..
我想链接原始二进制数据.我想要么把它放在一个特定的地址,要么让它链接到我在代码中定义的符号(例如char* mydata).由于它不是 obj 文件,我不能简单地将它链接进去. 一个类似的帖子(用 GNU 包含二进制文件ld 链接器脚本) 建议使用带有 -B bfdarch 选项的 objcopy.objcopy 响应“架构 bfdarch 未知". 另一个答案建议将对象转换为自定义
..
对于我的硕士论文,我正在尝试为 ARM Cortex-M3 嵌入式系统采用共享库方法.由于我们的目标板没有 MMU,我认为使用“普通"动态共享库是没有意义的.因为 .text 是直接从闪存执行的,而 .data 是在启动时复制到 RAM 中的,所以我无法解决与代码相关的 .data 问题,因此 GOT 也是如此.GOT 必须通过一个必须在链接时定义的绝对地址来访问.那么为什么不在链接时为所有符
..
我正在阅读: http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html 首先提示: 不应与使用此选项 (-fwhole-program) 的 -flto 结合使用.依赖链接器插件应该提供更安全、更精确的信息. 然后,它建议: 如果程序不需要导出任何符号,则可以组合 -flto 和 -fwhole-program 以允许过程间优
..
首先,我的本机系统是 amd64,Windows,使用 cygwin,以及 GNU 工具链和 binutils. 我正在编写一个 x86 引导加载程序,但无法让 ld 生成正确的相对地址.我已经准备了这个最小的可重复示例: main.s .code16.global _start.section .text_开始:打电话给其他人高 other.s .code16.global 其
..
我正在尝试通过 make menuconfig 配置 Linux 内核 [Angstrom 发行版],但是我收到了这些错误. make: 警告:文件`/usr/src/linux-2.6.32.61/arch/arm/Makefile' 的修改时间为 11511 秒make[1]:警告:文件`scripts/Makefile.host' 的修改时间为 11393 秒HOSTCC 脚本/基本/fi
..
我开始在 Windows 上学习 x86 汇编.我正在学习 32 位 x86 汇编.我使用 nasm 和 ld 来编译我的程序.我使用 mingw32-make 生成文件作为我的构建系统.我假设 ld 包含在 MinGW 中,但我不确定.我只知道它已经在我的电脑上. 我想编译一个非常简单的程序,以确保一切正常,当然,它没有.运行我的可执行文件时,一个巨大的蓝色框出现并显示“此应用程序无法在您
..
我花了最后两个小时,尝试使用MinGW链接不带任何CRT初始化代码的简单x86汇编程序.我希望可执行文件仅包含下面列出的 _main 方法和 ExitProcess 内核函数的单个导入. 在反汇编器中打开生成的各种文件,发现 _main 确实是入口点,并且导入表包含从 ExitProcess (无名称修饰).code> KERNEL32.dll ,但是Windows不会加载可执行文件,声称“
..
我试图通过使用LD脚本中的 STARTUP 指令将程序与我自己的启动文件链接: ...ENTRY(_start)启动(my_crt1.o)... GCC驱动程序用于链接程序(不打扰libgcc等库路径): gcc -T my_script.ld ... 不幸的是,它仅适用于为powerpc目标编译的GCC,而arm或i686目标则不行,并且仍然在collect2中包含crt0.o.
..
不管我跑什么, ./main.c:1:10:致命错误:libusb.h:没有这样的文件或目录#include"libusb.h"^ ~~~~~~~~~~编译终止. 尝试过的事情 gcc ./main.c -l/usr/include/libusb-1.0/gcc ./main.c -l/usr/include/gcc ./main.c -L/usr/include/libusb-1.0
..
我正在尝试编译使用Gurobi的C ++程序.问题是,尽管ldconfig看到了ld,但ld找不到该库.我也尝试配置LD_LIBRARY_PATH变量而没有成功 $ sudo ldconfig -v.../opt/gurobi701/linux64/lib:libgurobi.so.7.0.1->libgurobi.so.7.0.1libaes70.so->libaes70.solibGuro
..
这就是问题.基本上,我的问题是我正在尝试使用选项 -fsanitize = address -static-libasan (调试错误的指针等很酷的东西)为ARM编译应用程序.这可以直接编译为可执行文件,但不适用于从目标文件进行编译.我发现Ofc的静态库是 libasan.a ;无论如何,当我试图链接目标文件中的所有内容时,它说的是«pthread»中的一堆未定义引用,以及一些我什至都找不到的li
..
我使用的是Ubuntu 20.04, gcc 9.3.0, ld 2.34.我有一个简单的hello world程序,它不使用 glibc 或任何其他库,而仅使用write syscall.尽管如此,我的二进制文件大小仍约为8Kb.我不确定为什么这么大而不说1Kb. C程序: intx64_syscall_write(int fd,char const * data,unsigned l
..