问题标签 [ld]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 避免从 Linux 上的可执行文件中导出符号
我发现当我将可执行文件链接到静态库 (.a) 时,静态库中的符号最终会被可执行文件导出。我想避免这种情况并且什么也不出口。
我试过提供版本脚本,但似乎没有什么区别。我的版本脚本内容如下:
在静态库中链接时,有没有办法不从可执行文件中导出符号?我无法重新编译静态库本身。
linker - 未知的链接错误
我正在开发自己的操作系统,但为此我需要涉及链接,然后我已经完成了这个链接脚本来构建它:
但是当我尝试链接这些东西时,我遇到了一些错误
$ ld -T linker.ld -o kernel.bin loader.o kernel.o
ld:linker.ld:5: 语法错误
$
我能做些什么?
linker - GNU ld 删除部分
我正在为基于 ARM-Cortex M3 的设备编写启动脚本。如果我编译汇编器引导脚本和 C 应用程序代码,然后组合目标文件并将它们传输到我的设备,一切正常。
但是,如果我使用ar
创建存档 (libboot.a) 并将该存档与 C 应用程序结合起来,则会出现问题:
我已将引导代码放在一个部分中:
我发现ld
从最终的二进制文件中删除了这个(“引导”部分不可用)。这是很自然的,因为它不依赖它ld
知道,但它会导致设备无法正确启动。
所以我的问题是:强制包含此代码的最佳方法是什么?
c - 如何链接到不同的 libc 文件?
由于版本差异,我想与我的程序一起提供共享库,而不是使用目标系统。
ldd
说我的程序使用这些共享库:
我已经通过编译成功链接了 ld-xxx.so:
但我还没有成功链接libc-xxx.so
。我怎样才能做到这一点 ?
linux - glui /usr/bin/ld: 找不到 -lXmu
我已经下载了最新的 GLUI源代码,现在我正在尝试编译它。当我这样做时,我收到以下错误:
当我执行 alocate libXmu
时,我得到以下输出:
我是否因为没有 /usr/lib/libXmu.so 而收到错误?如果是这种情况,我该如何制作?(我根本没有链接经验)。
谢谢!
c++ - collect2.exe 有什么作用?
当我检查 gcc -v -o proggy.exe proggy.o 生成的代码时,我发现命令行扩展为一大堆库选项和库,所有这些都使用 collect2.exe 链接。ld.exe怎么了?为什么我看不到?有人可以向我解释一下 collect2.exe 的作用吗?
python - 我在哪里可以找到有关汇编程序的文档?
我编写了一个非常短的程序,它使用 python 解析“程序”并将其转换为汇编程序,允许我将我的小型编程语言编译为可执行文件。
您可以在此处阅读我的博客以获取更多信息 http://spiceycurry.blogspot.com/2010/05/simple-compilable-programming-language.html
我的问题是......我在哪里可以找到更多内核命令,以便我可以在上面的博客中进一步扩展我的脚本?
gcc - Gcc 和 ld 参数
如何将选项--enable-auto-import
从 gcc 传递给 ld?
gcc - 将两个 GCC 编译的 .o 目标文件合并到第三个 .o 文件中
如何将两个 GCC 编译的 .o 目标文件合并到第三个 .o 文件中?
如果您有权访问源文件,-combine
GCC 标志将在编译之前合并源文件:
然而,这只适用于源文件,并且 GCC 不接受.o
文件作为该命令的输入。
通常,链接.o
文件无法正常工作,因为您不能将链接器的输出用作它的输入。结果是一个共享库,并且没有静态链接到生成的可执行文件中。
c++ - _dl_runtime_resolve -- 共享对象何时加载到内存中?
我们有一个具有高性能要求的消息处理系统。最近我们注意到第一条消息比后续消息花费的时间要长很多倍。当这通过我们的系统时,会发生一堆转换和消息增强,其中大部分是通过外部库完成的。
我刚刚分析了这个问题(使用 callgrind),将仅一条消息的“运行”与许多消息的“运行”进行比较(提供比较的基线)。
我看到的主要区别是函数“do_lookup_x”占用了大量时间。查看对该函数的各种调用,它们似乎都是由通用函数调用的:_dl_runtime_resolve。不确定这个函数是做什么的,但对我来说,这看起来像是第一次使用各种共享库,然后被 ld 加载到内存中。
这是一个正确的假设吗?二进制文件在准备使用共享库之前不会将它们加载到内存中,因此我们将看到第一条消息的速度大幅下降,但随后的消息都没有?
我们如何避免这种情况?
注意:我们在微秒级进行操作。