ld相关内容

链接描述文件中*(.data),*(.data *)和*(.data.*)之间的差异

只是想知道这些构造之间的区别是什么(对于文本,数据, rodata , bss 等)在链接描述文件中: .data : { *(.data) } .data : { *(.data*) } .data : { *(.data.*) } 在所有情况下,我们都从所有目标文件中收集数据部分,但细节在于细节. 快速测试表明, map 文件中的地址不同,从而影 ..
发布时间:2020-04-30 08:36:09 其他开发

GNU链接器:适应名称更改算法的更改

我正在尝试重新编译现有的C ++应用程序. 不幸的是,我必须依靠我只有一个预编译的静态存档的专有库. 我使用的是g ++版本7.3.0和ld版本2.30. 无论使用哪种GCC版本,它都是古老的. 头文件定义了方法: class foo { int bar(int & i); } 如nm lib.a所示,库存档包含相应的导出函数: T bar__4fooRi ..
发布时间:2020-04-30 08:36:07 C/C++开发

搜索和链接库目录的顺序

我很难理解搜索目录以链接到库的顺序.我有一个CentOS6系统和3个版本的gcc,4.4.7、4.7.2、4.9.2.系统版本为4.4.7,版本4.7.2和4.9.2为模块.在/etc/ld.so.conf.d/中,有两个文件gcc-4.7.2.conf和gcc-4.9.2.conf,它们包含指向4.7.2和4.9.2库的路径. 我创建了一个简单的C ++程序main.cpp #inc ..
发布时间:2020-04-30 08:36:03 其他开发

将.org指令与.data节中的数据一起使用:与ld有关

在努力了解如何使用GNU binutils使用以下命令构建简单的引导加载程序的过程中 gas 我遇到了一个问题,怎么办您告诉链接器将数据放置在使用.org扩展位置计数器的文件中,同时将文件大小保持为512字节的位置.我似乎找不到办法. 尝试执行此操作的汇编程序是: # Author: Matthew Hoggan # Date Created: Tuesday, Mar 6, 2012 ..
发布时间:2020-04-30 08:35:58 服务器开发

在Linux的可执行文件中嵌入数据时,如何控制符号名称?

我需要将一些数据嵌入Linux上的可执行文件或SO文件中.我发现可以使用ld --format binary进行操作,但是,我看到的所有示例都假定数据文件位于当前目录中.如果不是,那么生成的符号名称将变得很复杂,因为它试图包含文件的完整路径. 是否有一种方法可以为ex明确提供符号名称.说这个数据的符号名称应该是MyData吗? 谢谢 解决方案 您绝对不能在--format=bi ..
发布时间:2020-04-30 08:35:50 服务器开发

如何在dylib中指定rpath?

我有一个库:libfoo.dylib.该问题在以下命令中得到说明: $ install_name_tool -id "@rpath/libfoo.dylib" libfoo.dylib $ install_name_tool -add_rpath "@executable_path/" libfoo.dylib $ gcc -o foo foo.c -lfoo $ ./foo # ..
发布时间:2020-04-30 08:35:47 其他开发

SEGMENT_START("text-segment",0x400000)代表什么?

我正在了解可执行二进制文件的布局.我的最终目标是分析一个特定的可执行文件,寻找可以重构的东西(在其源代码中),以减少编译后的输出大小. 我一直在使用 https://www.embeddedrelated.com/showarticle/900. php 和 https://www.geeksforgeeks.org/memory -layout-of-c-program/作为此初步学习的参 ..
发布时间:2020-04-30 08:35:45 其他开发

未解决的弱函数的GCC行为

考虑以下简单程序: __attribute__((weak)) void weakf(void); int main(int argc, char *argv[]) { weakf(); } 当使用gcc进行编译并在Linux PC上运行时,它会出现段错误.在ARM CM0(arm-none-eabi-gcc)上运行它时,链接器通过跳转到以下指令和nop来替换未定义的符 ..
发布时间:2020-04-30 08:35:40 其他开发

collect2:致命错误:ld以信号11终止[分段故障]

我实际上无法在C中编译一个简单的"helloworld".当我键入"gcc hello.c"时,输出为: collect2:致命错误:ld以信号11 [分段故障]终止 有一个主意吗? 我尝试重新安装gcc,g ++,make,cmake,binutils.这些都不起作用. 当我在终端中仅输入"ld"时,输出为: “分段错误" 解决方案 我可以用 解决 sudo apt清除b ..
发布时间:2020-04-30 08:35:38 服务器开发

如何删除警告:link.res包含输出部分;你忘了-T吗?

我正在使用fpc编译器,并且想删除此警告.我已经阅读了fpc的选项,但是找不到该怎么做.这可能吗? 它在我运行命令时出现: fpc foo.pas 退出: 目标操作系统:用于i386的Linux编译foo.pas链接p2/usr/bin/ld: 警告:link.res包含输出节;你忘了-T吗? 79 行编译,0.1秒 解决方案 在某些LD版本中是一个错误.现在暂时将其忽略, ..
发布时间:2020-04-30 08:35:36 服务器开发

在GCC编译中隐藏函数名称

我正在编译一个c"hello world"程序,该程序只包含一个简单函数和一个主要函数. 我正在Linux下使用GCC. 在二进制文件上运行readelf命令时,我可以看到符号表,并且可以清楚地看到函数名称. 是否可以告诉GCC(或链接器)不生成此符号表? 是否可以告诉GCC仅存储函数地址,而不用明文存储函数名称? 解决方案 使用-s选项剥离符号表: gcc ..
发布时间:2020-04-30 08:35:32 其他开发

使用glibc而不是默认库进行编译的C程序:执行时拒绝权限

这是我关于stackoverflow的第一个问题,所以我会尽力做到这一点. 上下文: 我想提供一个可以在每个Linux发行版上运行的程序(例如,一个将使用C ++ 11的程序,在没有C ++ 11库的系统上运行). 为此,我想复制程序使用的所有库,并将它们放在带有可执行文件的文件夹中,以便它可以使用这些库而不是系统的库. 我有2种环境要测试: -Opensuse,使用(GNU l ..
发布时间:2020-04-30 08:35:30 服务器开发

ld:架构armv7 Xcode项目的xx个重复符号

大家好,我有一个Xcode项目,每次尝试构建该项目时都会出现此错误: ld:体系结构armv7 Xcode项目的xx个重复符号 铛:错误:链接器命令失败,退出代码为1 ... 我已经四处搜寻,大多数解决方案都说要摆脱 在项目的build phase-> Compile Resources部分中进行更改,或将某些文件中的导入.m更改为.h.问题在于,已编译资源的列表甚至没有排序,而且我什 ..
发布时间:2020-04-30 08:35:26 移动开发

使用gnu链接器更改入口点

我有一个带有_start标签的程序集文件,这是.text段中的第一件事.我希望这个标签成为我的应用程序的入口点. 每当我将此文件与另一个具有main函数的文件一起传递时,无论如何,该main函数最终都将成为我应用程序的入口点. 我正在使用GNU链接器,并尝试过-e _start标志以及更改输入文件的顺序.只要存在main函数,它将成为入口点.如果我重命名main函数,则它可以正常工作, ..
发布时间:2020-04-30 08:35:22 其他开发

抑制共享库的编译时链接

我正在集成一个DRM库,出于安全原因,该库不能以明文形式保留在代码存储库中. DRM库仅在安全目标设备上运行时才是明文,因此只能在运行时进行链接.这带来了编译时链接的问题. 例如,如果我创建依赖于DRM库libDrm.so的my_library.so,则如果我仅使用"ld:无法找到-lDrm"从构建中删除libDrm.so,则以下操作将失败 gcc -fPIC -shared -o my_l ..
发布时间:2020-04-30 08:35:20 服务器开发