问题标签 [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 投票
16 回答
455902 浏览

c# - 在已编译的可执行文件中嵌入 DLL

是否可以将预先存在的 DLL 嵌入到已编译的 C# 可执行文件中(这样您只有一个要分发的文件)?如果有可能,人们将如何去做呢?

通常,我很乐意将 DLL 留在外面并让安装程序处理所有事情,但是有几个工作人员问过我这个问题,我真的不知道。

0 投票
4 回答
60860 浏览

xcode - 如何使用 Xcode 创建动态库 (dylib)?

我在 Xcode 中构建了一些命令行实用程序(纯 C,没有 Cocoa)。我希望他们所有人都使用我定制的 libpng 版本,并且我想通过在所有可执行文件之间共享一个库的副本来节省空间(我不介意.dylib与它们一起重新分发)。

我需要做一些魔术来获取 libpng 导出符号吗?

“Link Binary With Libraries”是否静态构建阶段链接?

Apple 的文档提到在运行时加载库dlopen,但是我如何让 Xcode 创建可执行文件而不抱怨缺少符号?


我想我已经弄清楚了:

  • libpng 没有正确链接,因为我已经构建了 32/64 位可执行文件和 32 位库。库和可执行文件的构建设置必须匹配。

  • libpng 的 config.h 需要有大量的定义,例如#define FEATURE_XXX_SUPPORTED

  • “Link Binary With Libraries”构建阶段可以很好地处理动态库,并且DYLD_FALLBACK_LIBRARY_PATH环境变量对于.dylib从应用程序包加载 s 是必需的。

0 投票
2 回答
16009 浏览

visual-c++ - 如何在 Visual C++ 中更改 OutDir 变量?

在链接器中,二进制目标指定为:

$(OutDir)\$(ProjectName).exe

我查看了所有设置,但看不到 OutDir 的定义位置。我该如何改变?

0 投票
3 回答
19290 浏览

c++ - 对于不遵循 libNAME.so 命名约定的库,如何在没有 -l 或硬编码路径的情况下使用 GCC 链接?

我有一个共享库,我希望使用 GCC 链接可执行文件。共享库的名称不是 libNAME.so 形式的非标准名称,因此我不能使用通常的 -l 选项。(它恰好也是一个 Python 扩展,因此没有“lib”前缀。)

我可以将库文件的路径直接传递给链接命令行,但这会导致库路径被硬编码到可执行文件中。

例如:

有没有办法链接到这个库而不导致路径被硬编码到可执行文件中?

0 投票
2 回答
997 浏览

gcc - gcc 链接器问题

我正在尝试制作一个包装 libpurple 的库(您无需了解有关 libpurple 的任何信息即可在此处提供帮助)。Libpurple 反过来加载“插件”,这些“插件”只是通过 dlopen 之类的东西访问的 .so。这些插件依次回调 libpurple 中的函数。

我可以很好地构建我的库,但是当它调用适当的 libpurple init 函数并且 libpurple 尝试加载插件时,我收到如下错误:

符号查找错误:/usr/local/lib/purple-2/autoaccept.so:未定义符号:purple_user_dir

Purple_user_dir 是 libpurple 中定义的函数。当我构建一个链接到 libpurple 的程序(不是库)时,没有问题。我试过使用 -export-dynamic ,但这似乎没有帮助。这是我的构建命令:

谢谢。

0 投票
7 回答
79618 浏览

c++ - 静态变量初始化顺序

C++ 保证编译单元(.cpp 文件)中的变量按声明顺序进行初始化。对于编译单元的数量,此规则分别适用于每个编译单元(我的意思是类之外的静态变量)。

但是,变量的初始化顺序在不同的编译单元中是未定义的。

我在哪里可以看到关于 gcc 和 MSVC 的这个顺序的一些解释(我知道依赖它是一个非常糟糕的主意 - 这只是为了了解我们在迁移到新的 GCC 主要和不同操作系统时可能遇到的遗留代码问题) ?

0 投票
5 回答
7017 浏览

c++ - 无法链接静态库 C++

我已经想出了如何设置 VC++ 将代码编译成 .lib 文件而不是 .exe,但是我无法让 lib 与我的其他 .obj 文件链接在一起。

这是我设置库和应用程序文件夹的方式。(我不确定这是否正确)

以及硬盘驱动器上的其他地方...

我一直在#include 我的应用程序的 cpp 文件中的库 *.h 文件,并且一切都编译得很好。只是当它链接时,我得到了所有正在搜索的 .lib 文件的列表,即使我在 VC++ 目录中列出了 Library.lib,它也不在那里。我怎样才能得到这个链接?(我是否正确地构建了库文件夹?)

0 投票
5 回答
13061 浏览

c++ - 函数模板参数的C++模板实例化

我在使用模板实例化 [*] 时遇到以下问题。

文件foo.h

文件foo.cc

文件调用者.cc

虽然这编译得很好,但链接器抱怨一个未定义的符号:

void Foo::func<boost::_bi::bind_t...>

如何实例化函数 Foo::func?由于它需要一个函数作为参数,我有点困惑。我尝试在foo.cc中添加一个实例化函数,因为我习惯于使用常规的非函数类型:

显然,这是行不通的。如果有人能指出我正确的方向,我将不胜感激。

谢谢!

[*] 是的,我阅读了 parashift FAQ 精简版。

0 投票
1 回答
839 浏览

c++ - 如何指定库 X 必须静态链接?

我有一个与多个库链接的软件。它们都存在于动态 (.so) 和静态 (.a) 版本中。默认情况下,当使用 g++ 时,它会选择库的动态版本,这对我来说很好。

但是,其中之一绝对需要静态链接。我考虑过使用-static但后来它对所有这些都使用了静态版本,这不是我想要的。

如何指定库 X 必须静态链接,而其他库继续链接到 libs 的共享版本?

0 投票
3 回答
7778 浏览

command-line - 如何使用 $ORIGIN 获取 RPATH 以在 Code::Blocks GCC 上工作?

我正在尝试将包含特殊字符串 $ORIGIN 的 RPATH 链接到使用 GCC 和 Code::Blocks IDE 构建的可执行文件中。我已经指定

在项目的链接器选项中,但到 GCC 的命令行输出是错误的(为了清楚起见已删除):

为 Code::Blocks 指定此参数的正确方法是什么?