问题标签 [linker]

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.

0 投票
1 回答
169 浏览

resources - 关于编译中链接过程的好资源

我一直在写代码,我一直认为编译的链接阶段非常简单,但是最近我不得不在应用程序中添加一个插件系统,并且我遇到了很多编译和运行时问题,由于我对这件事完全缺乏了解。我现在已经让它工作得很好,并且在这个过程中学到了很多东西,但是现在我意识到我在这个主题上还有很多东西要学,我想更多地探索这个主题。所以我想知道是否有人对整个“代码部分、符号、链接、动态/静态库......”业务的文章、博客文章或书籍有很好的指导。

我正在使用 gcc 和 ld 在 Linux 上进行开发,但我也对 M$ 的做事方式感兴趣,我渴望知识:)

谢谢!

0 投票
6 回答
105999 浏览

c++ - __gxx_personality_v0 有什么用?

这是来自操作系统开发站点的二手问题,但它让我感到好奇,因为我在任何地方都找不到合适的解释。

使用 gcc 编译和链接独立 C++ 程序时,有时会出现如下链接器错误:

这显然是因为该符号是在 libstdc++ 中定义的,而独立环境中缺少该符号。解决这个问题只需要在某个地方定义这个符号:

这很好,但我不喜欢神奇地起作用的东西......所以问题是,这个符号的目的是什么?

0 投票
4 回答
5287 浏览

arrays - 你如何链接两个数组?

我在一个基本的编程课上,一切都是用伪代码完成的。

我的问题是:如何链接两个数组?

我有一个列出学生姓名的一维数组,我有一个列出每个学生的前八名分数的二维数组……这一切都很好,但现在我需要按学生对数组进行排序姓名。我在网上闲逛并通读了书籍章节两次,它只简要提到了链接两个数组,但没有显示示例。

如果有任何帮助,我们正在使用冒泡排序,这是我相当熟悉的......我可以对名称进行排序,这很容易,但我不知道如何对成绩进行排序,所以他们不会出故障。

感谢您的输入!

旁注:我明白了!我最终按照 Greg Hewgill 提到的方式做了。当我对他的建议发表评论时,我开始随机输入代码行,直到我想到这个想法......它看起来并不漂亮(一个模块交换了名称,另一个交换了成绩,甚至还有第三个在多维数组中交换个别学生的成绩),但它确实似乎工作......没有办法用一种语言测试它,因为我没有编译器,也没有足够的知识将伪代码变成实际代码,如果我要下载一个,但在我打出来的纸上听起来真的很棒!

正如我在笔记中提到的,我非常感谢大家的快速和有益的洞察力,我什至没想到今晚我会得到回复,再次感谢大家的帮助!

杰弗里

0 投票
2 回答
8375 浏览

gcc - 从 LD 隐藏共享对象中的符号

我有两个第三方库偶尔会导出相同的符号名称。加载可执行文件时,ld通常会选择错误的文件,结果导致我崩溃。我不能对这些库的内容做太多,所以可能有一种方法可以指导ld如何找到正确的实施方式?

操作系统 - Solaris 10,我的程序是由 autoconf/autotools/gcc 构建的,冲突的库是libclntsh(Oracle 驱动程序的一部分)和 OpenLDAP。不幸的是,我不能使用 Oracle 的 LDAP 客户端实现——它缺少 OpenLDAP 的许多功能。

编辑:链接如下:libclntsh.so->A.so->MAIN<-B.so<-libldap_r.so

0 投票
8 回答
699238 浏览

linux - ld 找不到现有的库

我正在尝试在此 Debian lenny 系统上将应用程序与 g++ 链接。ld 抱怨找不到指定的库。这里的具体示例是 ImageMagick,但我在其他一些库中也遇到了类似的问题。

我用以下方式调用链接器:

ld抱怨:

但是,libmagic 存在:

我如何进一步诊断这个问题,可能出了什么问题?我在做一些完全愚蠢的事情吗?

0 投票
1 回答
1039 浏览

object - ELF 和 PE 的基本链接过程如何工作

我一直对链接器的工作方式感到困惑,而且这是一个很难搜索的主题。

为了演示我的问题并为答案提供框架,我将写下到目前为止我所知道的(或认为我知道的)。我可能是非常错误的。:)

首先,每个 .cpp 文件都被构建到一个中间文件中(我相信 .o 代表 Posix/ELF 和 .obj 代表 Win/PE)。该中间文件包含由它构建的 .cpp 定义的所有符号,并说明了需要正确解析哪些外部链接。作为对此的扩展,Posix 系统允许您将 .o 文件合并到 .a 文件中(这似乎除了合并之外没有任何作用?这是什么命令?)。.lib 是 Posix .a 文件的 Win/PE 等价物吗?

接下来,将中间文件链接在一起,解决外部依赖关系,并获得可执行文件。我错过了任何步骤吗?

谢谢!

0 投票
3 回答
14014 浏览

c - 您可以静态编译 cygwin 应用程序吗?

cygwin 是否允许静态编译的二进制文件?这将防止 cygwin1.dll 出现在目标机器的 PATH 上。

0 投票
17 回答
55023 浏览

c++ - 错误 LNK2005:_DllMain@12 已在 MSVCRT.lib 中定义

我收到此链接器错误。

mfcs80.lib(dllmodul.obj):错误 LNK2005:_DllMain@12 已在 MSVCRT.lib(dllmain.obj) 中定义

请告诉我消除此错误的正确方法。我在微软支持网站上阅读了关于这个错误的解决方案,但它并没有太大帮助。

我正在使用带有平台 SDK 的 VS 2005

0 投票
2 回答
351 浏览

visual-studio-2008 - Visual Studio 2008 C++ 问题

我正在尝试编写一个程序来计算二次公式。当我运行它时,我收到 2 条错误消息:

这是在我从...更改最后一行代码之后:

在进行该更改之前,我遇到了 2 个编译器错误:C2563 和 C2568。在朋友的电脑上,该程序运行良好。

我能做些什么来解决这个问题?

0 投票
6 回答
5909 浏览

delphi - 如何重命名exe文件

假设我有一个通用的垂直市场应用程序,我想将它打包为两个单独的程序 aaa.exe 和 bbb.exe。有没有办法使用 Delphi 链接器创建一个与 DPR 名称不同的 EXE/DLL 文件?

我不能只重命名文件,因为我收到此错误

现在一般来说,我可以重命名一个可执行文件,但不能重命名这个。感谢您的评论指出我在这方面的愚蠢。有一个问题,显然不是一个正常的问题,甚至不一定与Delphi有关。

我正在使用 Delphi 7(如果在 2007/2009 年可能会很棒,因为我需要更多的升级素材)