ld相关内容

使用 CMake 强制进行 32 位编译的正确方法

抱歉,有很多类似的问题,但我确实发现谷歌搜索 CMake 查询总是会产生类似但不相同的场景、冲突的 CMake 命令等等! 我需要强制我的项目构建 32 位二进制文​​件,因为我必须链接一个只能作为 32 位使用的库.我根据错误消息对此进行了诊断,例如: /usr/bin/ld: i386 架构的输入文件 `*external-32bit-lib*' 与 i386:x86-64 输出不兼容 ..
发布时间:2021-11-26 14:41:34 C/C++开发

MacOS Catalina 上的 ld64 segprot 不起作用?

我想在 MacOS Catalina(64 位)上创建一个具有可执行数据段的二进制文件(参见 此处 了解详情)但从一开始就无法执行. 我用 制作我的二进制文件 gcc -nostdlib -segprot __DATA rwx rw- .... 我还用gcc创建了一个目标文件,然后直接调用了ld.ld 版本是 $ ld -v@(#)PROGRAM:ld 项目:ld64-5302019 ..
发布时间:2021-11-25 06:56:31 C#

由于 PIC,无法从汇编中的 x86-64 对象链接共享库

我正在将共享库从 32 位移植到 64 位.它由一些程序集(为 NASM 编写)组成,该程序集导出多个程序和一些更高级别的 C 粘合代码.我正在使用 NASM 2.10.01 和 GNU ld 2.22 的 64 位 Debian 机器上构建. 解决了所有推送/弹出问题(推送寄存器的 32 位部分显然在 64 位模式下不起作用)后,我有要组装的对象,但现在我被链接阶段暂停了.这是我的命令行 ..
发布时间:2021-11-25 06:02:34 C#

找不到 crtn.o,在 64 位系统上链接 32 位代码

我正在尝试在 64 位系统上使用 NASM 和 GCC 组装一些 32 位代码.我使用以下两个命令 nasm -f elf32 -g -F stabs coc.asmgcc -m32 -o coc coc.o NASM 看起来不错,但 LD 抱怨: /usr/bin/ld: 找不到 crt1.o: 没有那个文件或目录/usr/bin/ld: 找不到 crti.o: 没有那个文件或目录/usr ..
发布时间:2021-11-25 05:32:25 C#

在 64 位 Ubuntu 中构建 32 位应用程序

经过数小时的谷歌搜索,我决定放弃并请教各位专家.我正在尝试在我的 64 位 Ubuntu 11.10 中构建一个 32 位应用程序(如果有人感兴趣,则为 xgap).我在 makefile 中添加了 CFLAGS=-m32 和 LDFLAGS=-L/usr/lib32.这些对象被内置到 32 位精细中.最后一步是将 X 窗口的所有对象和库链接到这个可执行文件——xgap.不知何故,它不断给我这个错 ..
发布时间:2021-11-24 23:47:28 C#

使用 CMake 强制进行 32 位编译的正确方法

抱歉,有很多类似的问题,但我确实发现谷歌搜索 CMake 查询总是会产生类似但不相同的场景、冲突的 CMake 命令等等! 我需要强制我的项目构建 32 位二进制文​​件,因为我必须链接一个只能作为 32 位使用的库.我根据错误消息对此进行了诊断,例如: /usr/bin/ld: i386 架构的输入文件 `*external-32bit-lib*' 与 i386:x86-64 输出不兼容 ..
发布时间:2021-11-24 23:29:18 C#

如何编写这个 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 : ..
发布时间:2021-11-17 22:38:43 其他开发

链接脚本浪费了我的记忆

这是我的问题.我有一个链接标准 arm7nommu-uClinux 内核的链接器脚本: OUTPUT_ARCH(arm)条目(文本)部分{.= 0x0;.vectors:{*(.resetvector)}.= 0x8000;.init : {/* 初始化代码和数据 */_stext = .;__init_begin = .;*(.text.init)__proc_info_begin = .;* ..
发布时间:2021-11-17 22:31:19 其他开发

为什么 ld 在输出文件中包含链接命令文件中未指定的部分?

我正在努力理解如何让 ld(在 gcc arm 嵌入式工具包中)做我想做的事: 举个例子,我有几个要链接的 .o 文件.说我只想要一个名为 .foo 的部分在输出中.我把它放在命令文件 link.ld 中: SECTIONS{.foo : {*(.text)}} 然后去“ld -T link.ld file1.o fil2.o -o output.o" 然后我在 output.o ..
发布时间:2021-11-17 22:31:07 其他开发

未解析弱函数的 GCC 行为

考虑下面的简单程序: __attribute__((weak)) void weakf(void);int main(int argc, char *argv[]){弱();} 当用 gcc 编译它并在 Linux PC 上运行它时,它会出现段错误.在 ARM CM0 (arm-none-eabi-gcc) 上运行时,链接器通过跳转到以下指令和 nop 替换未定义符号. 这种行为记录在哪 ..
发布时间:2021-11-17 22:26:27 其他开发

CPU 相关代码:如何避免函数指针?

我为多个 CPU 编写了性能关键代码.我在运行时检测 CPU,并基于此为检测到的 CPU 使用适当的函数.所以,现在我必须使用函数指针并使用这些函数指针调用函数: void do_something_neon(void);void do_something_armv6(void);void (*do_something)(void);如果(CPU == 霓虹灯){do_something = d ..
发布时间:2021-11-17 22:09:09 其他开发

为什么这个函数确实以 1 的偏移量指向自身?

我正在尝试使用 C 为 Nucleo-64 Stm32F401re 板编写裸机闪烁程序.然而,在开始调试错误时(它还没有闪烁),我发现了一个奇怪的地址,我没有找到任何解释.这是反汇编相关部分的输出: blink.elf:文件格式elf32-littlearm.text 节的反汇编:08000000 :8000000: 20018000 andcs r8, r1 ..
发布时间:2021-11-17 22:00:12 其他开发

从 gcc4.7.x 中删除 crt0.o 背后的基本原理是什么?

我正在尝试升级到 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 ..
发布时间:2021-11-17 21:58:49 其他开发

使用 GCC ARM 工具链链接任意数据

我想链接原始二进制数据.我想要么把它放在一个特定的地址,要么让它链接到我在代码中定义的符号(例如char* mydata).由于它不是 obj 文件,我不能简单地将它链接进去. 一个类似的帖子(用 GNU 包含二进制文件ld 链接器脚本) 建议使用带有 -B bfdarch 选项的 objcopy.objcopy 响应“架构 bfdarch 未知". 另一个答案建议将对象转换为自定义 ..
发布时间:2021-11-17 21:40:00 其他开发

如何创建静态链接共享库

对于我的硕士论文,我正在尝试为 ARM Cortex-M3 嵌入式系统采用共享库方法.由于我们的目标板没有 MMU,我认为使用“普通"动态共享库是没有意义的.因为 .text 是直接从闪存执行的,而 .data 是在启动时复制到 RAM 中的,所以我无法解决与代码相关的 .data 问题,因此 GOT 也是如此.GOT 必须通过一个必须在链接时定义的绝对地址来访问.那么为什么不在链接时为所​​有符 ..
发布时间:2021-11-17 21:39:29 其他开发

g++ 优化标志:-fuse-linker-plugin vs -fwhole-program

我正在阅读: http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html 首先提示: 不应与使用此选项 (-fwhole-program) 的 -flto 结合使用.依赖链接器插件应该提供更安全、更精确的信息. 然后,它建议: 如果程序不需要导出任何符号,则可以组合 -flto 和 -fwhole-program 以允许过程间优 ..
发布时间:2021-09-29 19:45:36 其他开发

使用带有 16 位 x86 的 GNU LD 的相对地址不正确

首先,我的本机系统是 amd64,Windows,使用 cygwin,以及 GNU 工具链和 binutils. 我正在编写一个 x86 引导加载程序,但无法让 ld 生成正确的相对地址.我已经准备了这个最小的可重复示例: main.s .code16.global _start.section .text_开始:打电话给其他人高 other.s .code16.global 其 ..
发布时间:2021-09-29 19:40:42 其他开发

链接失败 [ld 找不到库]

我正在尝试通过 make menuconfig 配置 Linux 内核 [Angstrom 发行版],但是我收到了这些错误. make: 警告:文件`/usr/src/linux-2.6.32.61/arch/arm/Makefile' 的修改时间为 11511 秒make[1]:警告:文件`scripts/Makefile.host' 的修改时间为 11393 秒HOSTCC 脚本/基本/fi ..
发布时间:2021-07-23 20:21:42 其他开发