ld相关内容
字符转换 big-old-app 链接到旧版本的 glibc ,例如 glibc-2.12 .我无能为力. cute-new-addon.o 已链接到更新版本 glibc-2.23 .此 glibc-2.23 位于非标准路径中(因为我没有sudo权限). 故事 我想在 big-old-app 中使用 cute-new-addon.o .我通常会编写一个脚本来执行 big-old
..
我一直在浏览一些配置文件,并且看到它们都被使用了(尽管在不同的体系结构上).如果您在Linux机器上使用GCC,则将选项传递到链接器的两种语法之间是否有区别? 在阅读GCC手册时,据我所知它们几乎完全相同. 解决方案 来自 man gcc : -Xlinker选项 通过选项作为链接器的选项.您可以使用它来提供GCC不知道如何识别的系统特定的链接器选项. 如果要传递带
..
我很好奇.我创建了一个共享对象: gcc -o liba.so -fPIC-共享的liba.c 还有一个共享对象,它与前一个对象链接: gcc -o libb.so -fPIC-共享的libb.c liba.so 现在,当创建链接到 libb.so 的可执行文件时,我将必须指定-rpath-link到ld,以便在发现时可以找到 liba.so libb.so 依赖于它: gcc
..
在链接描述文件中,我定义了 PROVIDE(__ KERNEL_BEGIN__ =.); . 可以从以下地址访问地址: extern uint32_t __KERNEL_BEGIN __ []; 但是,以下操作不起作用(给出了错误的地址): extern uint32_t * __KERNEL_BEGIN__; 我看了看大会.第一种方法 __ KERNEL_BEGIN __
..
我正在设法弄清生成可执行文件时链接过程的工作方式.为此,我正在阅读伊恩·泰勒(Ian Taylor)的博客系列,但其中有很多目前,它还超出了我的范围-所以我想看看它在实践中是如何工作的. 此刻,我生成了一些目标文件,并通过gcc将它们链接为: gcc -m32 -o test.o -c test.cgcc -m32 -o main.o -c main.cgcc -m32 -o测试main
..
我正在查看我在Eclipse中构建的输出.我正在交叉编译ColdFire处理器.编译行如下所示: m68k-elf-g ++ -O2 -falign-functions = 4 -IC:\ nburn \ include -IC:\ nburn \ MOD52 ... 之后是更多包含文件,明显的“编译器"标志,最后是我更改的一个源文件.下一行再次调用相同的工具: m68k-elf-g
..
我拥有共享库的头文件,但没有共享库或其源代码. 我仍然可以针对该库编译一些代码吗? 如果没有,则共享库包含哪些信息而不包含在标头中? 解决方案 我仍然可以针对该库编译一些代码吗? 编译:是的.链接:也许吧. 您可以创建一个虚拟库进行链接.例如.如果标题包含: int library_func(void *); 然后: //dummy_lib.cint
..
这是一个非常简单的汇编程序,执行后只需返回 12 . $ cat a.asm全局_start.text部分_start:mov rax,60;系统调用退出mov rdi,12岁;退出代码12系统调用 它可以正确构建和执行: $ nasm -f elf64 a.asm&&ld a.o&&./a.out ||回声$?12 但是a.out的大小很大,超过了4k: $ wc -c a.
..
我正在尝试创建尽可能小的ELF.我创建了这样的测试文件(NASM语法): SECTION .textdd 0xdeadbeef 使用此链接描述文件: SECTIONS {.文本 : {*(.文本)}} 然后我检查了平面二进制文件和ELF的大小,构建了两种方法: nasm -f bin -o test test.asm 它是平面二进制,所以是4个字节. nasm -f e
..
我要做的是配置CMakeLists文件,以便在构建项目时,链接器使用驻留在构建树中的共享库(.so)的副本来链接可执行文件,但不设置链接的可执行文件中的rpath,以便系统在加载程序请求库时必须提供该库. 具体地说,我想在没有安装libOpenCL.so作为系统库的构建服务器场上的构建期间链接到libOpenCL.so.为此,libOpenCL.so位于项目构建树中,并使用CMakeList
..
我正在尝试使用CMake编写裸机程序(我的项目位于 https://github.com/oska874/cmake_test ).演示源代码如下: my.c void mymain(void){int a = 0;a ++;a ++;} 和链接脚本文件是: my.lds ENTRY(mymain)部分{.= 0x10000;.text:{*(.text)}.= 0x800
..
我要看看我的理解是否正确. inline 是C ++编译器的建议,建议在看起来更好时就替换一个函数,因此从库外部调用标记为内联的过程应该是不可靠的,并且从逻辑上讲,它们应该被隐藏默认情况下,阻止其他人调用它们作为对编译器或代码库的更新可以更改决定(从而删除 inline d函数和ABI损坏?). 但是,这似乎不是默认设置,应该设置 -fvisibility-inlines-hidden
..
我的可执行文件与许多静态库链接,在Linux上通常有50至100个存档.有时,这些档案中存在依赖性周期.这些库在链接命令行上出现的顺序很重要,请参见 简短答案:使用-start-group liblist -end-group 完成 出于某些原因: 一个ld组是 smart .它不只是循环文件.它会初次通过组,但会记住符号.因此,在随后的遍历中,它将使用缓存的符号表信息,因此非常
..
如何确定某个函数在库中是否存在,或在已编译的库中列出这些函数? 解决方案 您可以使用
..
我正在尝试在OSX上构建 http://github.com/ndevilla/iniparser ,但得到: 〜/使编译src/iniparser.c ...编译src/dictionary.c ...一个-src/iniparser.oa-src/dictionary.old:未知选项:-Bsymboliccollect2:ld返回1退出状态制作:*** [libiniparser.so]错
..
我正在尝试在OSX上构建 http://github.com/ndevilla/iniparser ,但得到: 〜/使编译src/iniparser.c ...编译src/dictionary.c ...一个-src/iniparser.oa-src/dictionary.old:未知选项:-Bsymboliccollect2:ld返回1退出状态制作:*** [libiniparser.so]错
..
我正在尝试使用C为Nucleo-64 Stm32F401re板编写裸机闪烁程序.但是,在开始调试错误时(它还没有闪烁),我发现了一个奇怪的地址,但没有找到任何解释.这是反汇编的相关部分的输出: blink.elf:文件格式elf32-littlearm.text部分的反汇编:08000000
..
对于某些情况,我正在使用实验性事务性内存模型(使用g ++编译)检查一个简单的C ++程序.我想确切地知道register_tm_clones的调用位置(您可以通过转储一个简单的程序来查看fn).即使在int main() {}之类的程序中,也会调用此函数. 我想知道在通用程序的整个范围中哪里调用了register_tm_clones.我在GDB中为其设置了一个断点并回溯: Break
..
为什么当我在gdb中调试asm源时是0x8048080为代码的起始入口点选择的地址?这只是相对偏移量,而不是指令存储器中的实际偏移量,对吗? 解决方案 地址0x8048080没有特殊意义,但地址0x08048000有一个特殊含义. 后一个地址是默认地址,在Linux/x86上,ld在该默认地址上开始第一个PT_LOAD段.在Linux/x86_64上,默认值为0x400000,您可以
..
在MinGW下使用GCC进行编译时,我需要一些帮助. 说我有2个文件: a.c包含2个函数a1和a2 b.c包含2个函数b1和b2. 然后,我将2个对象链接到共享库中.使用的命令如下: gcc -c a.c gcc -c b.c gcc -shared -Wl, --version-script v.ver -Wl, -Map=out.map -Wl, --strip-all -
..