问题标签 [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.
c# - 在已编译的可执行文件中嵌入 DLL
是否可以将预先存在的 DLL 嵌入到已编译的 C# 可执行文件中(这样您只有一个要分发的文件)?如果有可能,人们将如何去做呢?
通常,我很乐意将 DLL 留在外面并让安装程序处理所有事情,但是有几个工作人员问过我这个问题,我真的不知道。
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 是必需的。
visual-c++ - 如何在 Visual C++ 中更改 OutDir 变量?
在链接器中,二进制目标指定为:
$(OutDir)\$(ProjectName).exe
我查看了所有设置,但看不到 OutDir 的定义位置。我该如何改变?
c++ - 对于不遵循 libNAME.so 命名约定的库,如何在没有 -l 或硬编码路径的情况下使用 GCC 链接?
我有一个共享库,我希望使用 GCC 链接可执行文件。共享库的名称不是 libNAME.so 形式的非标准名称,因此我不能使用通常的 -l 选项。(它恰好也是一个 Python 扩展,因此没有“lib”前缀。)
我可以将库文件的路径直接传递给链接命令行,但这会导致库路径被硬编码到可执行文件中。
例如:
有没有办法链接到这个库而不导致路径被硬编码到可执行文件中?
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 ,但这似乎没有帮助。这是我的构建命令:
谢谢。
c++ - 静态变量初始化顺序
C++ 保证编译单元(.cpp 文件)中的变量按声明顺序进行初始化。对于编译单元的数量,此规则分别适用于每个编译单元(我的意思是类之外的静态变量)。
但是,变量的初始化顺序在不同的编译单元中是未定义的。
我在哪里可以看到关于 gcc 和 MSVC 的这个顺序的一些解释(我知道依赖它是一个非常糟糕的主意 - 这只是为了了解我们在迁移到新的 GCC 主要和不同操作系统时可能遇到的遗留代码问题) ?
c++ - 无法链接静态库 C++
我已经想出了如何设置 VC++ 将代码编译成 .lib 文件而不是 .exe,但是我无法让 lib 与我的其他 .obj 文件链接在一起。
这是我设置库和应用程序文件夹的方式。(我不确定这是否正确)
以及硬盘驱动器上的其他地方...
我一直在#include 我的应用程序的 cpp 文件中的库 *.h 文件,并且一切都编译得很好。只是当它链接时,我得到了所有正在搜索的 .lib 文件的列表,即使我在 VC++ 目录中列出了 Library.lib,它也不在那里。我怎样才能得到这个链接?(我是否正确地构建了库文件夹?)
c++ - 函数模板参数的C++模板实例化
我在使用模板实例化 [*] 时遇到以下问题。
文件foo.h
文件foo.cc
文件调用者.cc
虽然这编译得很好,但链接器抱怨一个未定义的符号:
void Foo::func<boost::_bi::bind_t...>
如何实例化函数 Foo::func
?由于它需要一个函数作为参数,我有点困惑。我尝试在foo.cc中添加一个实例化函数,因为我习惯于使用常规的非函数类型:
显然,这是行不通的。如果有人能指出我正确的方向,我将不胜感激。
谢谢!
[*] 是的,我阅读了 parashift FAQ 精简版。
c++ - 如何指定库 X 必须静态链接?
我有一个与多个库链接的软件。它们都存在于动态 (.so) 和静态 (.a) 版本中。默认情况下,当使用 g++ 时,它会选择库的动态版本,这对我来说很好。
但是,其中之一绝对需要静态链接。我考虑过使用-static但后来它对所有这些都使用了静态版本,这不是我想要的。
如何指定库 X 必须静态链接,而其他库继续链接到 libs 的共享版本?
command-line - 如何使用 $ORIGIN 获取 RPATH 以在 Code::Blocks GCC 上工作?
我正在尝试将包含特殊字符串 $ORIGIN 的 RPATH 链接到使用 GCC 和 Code::Blocks IDE 构建的可执行文件中。我已经指定
在项目的链接器选项中,但到 GCC 的命令行输出是错误的(为了清楚起见已删除):
为 Code::Blocks 指定此参数的正确方法是什么?