ld相关内容
这个问题的标题是完全欺骗,但该问题的答案对我没有帮助. 我有一堆目标文件打包在一个静态库中: % g++ -std=c++98 -fpic -g -O1 -c -o foo.o foo.cpp% g++ -std=c++98 -fpic -g -O1 -c -o bar.o bar.cpp% ar -rc libsome.a foo.o bar.o 我想从 libsome.a 而不是目标
..
我正在尝试使用 C 为 Nucleo-64 Stm32F401re 板编写裸机闪烁程序.然而,在开始调试错误时(它还没有闪烁),我发现了一个奇怪的地址,我没有找到任何解释.这是反汇编相关部分的输出: blink.elf:文件格式elf32-littlearm部分.text的反汇编:08000000 :8000000: 20018000 andcs r8, r
..
我正在尝试升级到 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/ld.e
..
代码 这是给出段错误的程序. #include #include #include 主函数(){std::cout 是 {};std::cout
..
我正在使用 GLFW 学习 OpenGL,当时对 makefile 并没有很好的理解.我有 OpenGL 工作,但我决定更多地学习 makefile.经过很多网站、几个小时、反复试验,我想出了这个: EXENAME = "OpenGL 演示"CC = gccSRCS = ../src/OpenGLDemo.cOBJS = $(SRCS: .c = .o)CFLAGS = -墙 -g -cLIBS
..
当我检查 gcc -v -o proggy.exe proggy.o 生成的代码时,我发现命令行扩展为一大堆库选项和库,所有这些都使用 collect2.exe 链接.ld.exe怎么了?为什么我看不到?有人可以向我解释一下 collect2.exe 的作用吗? 解决方案 collect2 是一个实用程序,用于生成构造函数表,__main(自动生成的函数在 main 的开头调用)依赖于.通
..
我正在尝试使用 ld 直接链接以隔离构建问题. 当我包含 /usr/lib/gcc/x86_64-linux-gnu/4.7/libstdc++.so 时,我遇到了一些问题: ac-aaa.o:在函数“__static_initialization_and_destruction_0"中:/usr/include/c++/4.7/iostream:75: 未定义对“__dso_handle
..
我正在尝试使用 ld 而不是 g++ 链接 C++ 的输出.我这样做只是为了学习如何做,而不是出于实际目的,所以请不要建议只用 g++ 来做. 看着这个问题,这个人当他们运行 ld 命令时得到同样的错误: $ ld test.o -o test.outld:警告:找不到入口符号_start;默认为 00000000004000e8test.o:在函数“main"中:test.cpp:(.t
..
gold 的人说: -L DIR, --library-path DIR将目录添加到搜索路径--rpath-link 目录将 DIR 添加到链接时间共享库搜索路径 bfd ld 的 man 听起来有点像 -rpath-link 用于递归包含的 sos. ld.lld 甚至没有将其列为参数. 有人可以帮我澄清一下这种情况吗? 解决方案 这里有一个demo,对于GNU ld,
..
我试图弄清楚在生成可执行文件时链接过程是如何工作的.为此,我正在阅读 Ian Taylor 的博客系列,但很多目前它超出了我的范围 - 所以我想看看它在实践中是如何工作的. 目前我生成了一些目标文件并通过 gcc 链接它们: gcc -m32 -o test.o -c test.cgcc -m32 -o main.o -c main.cgcc -m32 -o 测试 main.o test.
..
我目前正在为 ATMega 编写中间内存引导加载程序. 我想将一段常用函数和数据放在内存中的特定位置,这样: 无法克服引导加载程序部分的大小限制 应用程序部分不会复制库函数、驱动程序等,因此会浪费空间 为了便于说明,下面是所需内存布局的地图: 在 此线程 在 avrfreaks 上,我已经能够移动未标记为 __attribute__ ((section(".boot"))
..
在使用 NASM 构建定义自己的 _start 而不是 main 的汇编程序时,我得到了一个 undefined reference to _printfx86-64 Ubuntu 构建命令: nasm -f elf64 hello.asmld -s -o 你好你好.ohello.o:在函数“_start"中:hello.asm:(.text+0x1a): undefined refer
..
我们有一个分解成静态库的代码库.不幸的是,这些库具有循环依赖关系.例如,libfoo.a 依赖于 libbar.a,反之亦然. 我知道处理此问题的“正确"方法是使用链接器的 --start-group 和 --end-group 选项,如下所示: g++ -o myApp -Wl,--start-group -lfoo -lbar -Wl,--end-group 但在我们现有的 Make
..
我在 ubuntu 12.04 上安装 pyipopt 时遇到问题.在链接期间,我收到错误: /usr/bin/ld: 找不到 -lcoinhsl 尽管我知道这个库已经安装并且 .so 和 .la 文件在 /home/mostafa/MyBuilds/CoinIpopt/build/lib/中可用 有人对此有解决方案吗? 下面是运行 setup.py build 的完整返回:
..
我想知道什么时候应该使用 ld 链接器而不是 gcc.我只是用 C++ 写了一个简单的 hello world,当然我包括 iostream 库.如果我想用 gcc 制作一个二进制文件,我只需使用: g++ hello hello.cpp我有我的二进制文件. 后来我尝试使用 ld 链接器.要获取目标文件,我使用:g++ -c hello.cpp.好的,这很容易,但是链接命令太长了:
..
我有一个应用程序,当我尝试运行它时出错: /lib/libc.so.6:未找到版本“GLIBC_2.7" 但它需要的 glibc 2.7 中唯一的符号是 __isoc99_sscanf@@GLIBC_2.7 我想用这个符号作为 __sscanf() 的别名写一个小的单一函数“库" 如何使用 gcc/ld 做到这一点? 我的变体不被接受,因为“@@"符号 int __isoc
..
如何使用 GNU ld 将(一些)符号链接到特定的固定地址,以便二进制文件仍然可以在 Linux (x86) 中正常执行?不会对这些符号进行任何访问,但它们的地址很重要. 例如,我有以下结构: struct FooBar {寄存器 32 字段_1;Register32 字段_2;//...};结构 FooBar foobar; 我想将 foobar 链接到地址 0x76543210,但可
..
这是来自 Linux 手册页的代码: #include #include extern char etext, edata, end;int main() {printf("第一个地址过去:\n");printf("程序文本 (etext) %10p\n", &etext);printf("初始化数据(edata)%10p\n", &edata);print
..
我正在尝试弄清楚如何设置一些环境变量,以使 g++ 链接到正确版本的库. 我在/usr/lib64 中有一些旧的 boost 库(链接这些库会失败),在/v/users/regel/lib 中有新的库.所以链接器应该链接到新的库. 命令: $ g++ test.cpp -lboost_system -L/v/users/regel/lib 正确链接程序.但是,我希望将其设置为链
..
-l 选项告诉链接器搜索标准目录中的库.并且通过-L,我们可以指定自己的库目录进行搜索. 问题:-L 选项的顺序是否也很重要,就像 -l w.r.t 链接器一样? 此链接:http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html 对-L的顺序没有多说. 编辑还有, 命令中指定的目录在默认值之前搜索行目录 来自手册页(正如
..