问题标签 [linker-flags]

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 回答
1302 浏览

xcode8 - 构建阶段之间的差异 -> 将二进制文件与库或构建设置链接 -> 链接器标志

Build Phases -> Link Binary with Libraries 或 Build Settings -> Linker Flags 有什么区别?

前者似乎不允许您在 Debug 与 Release 之间进行指定,并且其中指定的框架似乎也与后者不匹配。

注意:我已经检查了 SO 上的现有帖子,还没有找到准确回答这个问题的帖子。

0 投票
0 回答
1367 浏览

c++ - “library-path”、“rpath”和“rpath-link”背后的基本原理和预期用途

我注意到很多人,包括我在内,并不准确了解链接器搜索路径背后的基本原理和预期用途:“library-path”、“rpath”和“rpath-link”。有人可以向我们解释一下吗?

语境

经过我所有的阅读,我倾向于认为'library-path'和'rpath'就足够了。'rpath-link' 的基本原理和预期用途对我来说是个谜。让我解释一下为什么。设置 'library-path' 将指定的路径传递给链接器,以在链接(/构建)时
在指定路径中查找库。 设置“rpath”将指定的路径存储在构建的可执行文件中,链接器随后会在应用程序运行时(即运行时)查看指定的路径。 因此,如果您的库位于非标准位置,那么您需要指定“library-path”来构建可执行文件并指定“rpath”来运行它。


现在 GNU 链接器文档说:“-rpath 和 -rpath-link 之间的区别在于 -rpath 选项指定的目录包含在可执行文件中并在运行时使用,而 -rpath-link 选项仅在链接时有效。 "
这提出了两个问题:
1) 如果 'rpath-link' 中的 'r' 代表 'runtime',那么名称 'rpath-link' 似乎具有误导性,因为它是在链接时使用的。
2) 我已经在“库路径”中为链接时间指定了我的库目录。我认为“rpath-link”没有用。奇怪的现实:来自http://www.kaizou.org/2015/01/linux-libraries/我知道“库路径”不用于辅助依赖项(从一个共享库到另一个共享库的依赖项)。要解决这些次要依赖项,您需要设置“rpath”或“rpath-link”。那么我的问题是:您可能不使用“library-path”来指定辅助依赖项而是必须使用“rpath-link”的原因是什么

我是如何偶然发现这个问题的

我有一个名为 app 的可执行文件,它想要使用 liba.so 中的功能,所以我将 app 链接到 liba.so。liba.so 依赖于 libb.so。liba.so 和 libb.so 都位于 mylibs 目录中。当我想构建我的可执行文件时,我遇到了以下消息:

其次是几个未定义的参考错误。
为了正确构建它,我必须将'library-path'和'rpath-link'(或'rpath')都设置到目录mylibs。我很困惑为什么“库路径”也不能用于搜索二级依赖项 libb.so,并且必须设置一个额外的“rpath-link”来搜索这个二级依赖项。

相关问题: -rpath-link 的基本原理

0 投票
0 回答
407 浏览

swift - Xcode + Swift:如何防止框架编译

我有一种情况,我需要在“Link Binaries with Libraries”下添加一个框架,但这给我带来了一些问题,特别是在 iOS 9 模拟器上。

我有什么办法可以通过在构建设置中使用一些标志或使用任何预处理器宏来防止它编译?

到目前为止我已经尝试过:

在此处输入图像描述

上述两点并没有阻止它编译,因为我可以在我的 iOS 9 模拟器上看到这个问题。如果我删除框架,一切正常。

0 投票
2 回答
738 浏览

c - GNU g++ -G 选项用于创建在 Solaris 上而不是在 Linux 上可用的共享库

g++ 4.9.2 compilerSolarisLinux. 在 Solaris 平台上,要从源文件 (ac) 创建共享库,我使用以下命令:

a成为共享库 a.c包含以下代码:

如果我尝试不使用 -G 选项,即编译为:

它得到一个链接器错误:Undefined Symbol main

但是,在 Linux 上,如果我做同样的事情:它会说:

如何在 Linux 上创建共享库?有什么g++选择?

0 投票
0 回答
270 浏览

linker - arm-none-eabi-ld 和 -z muldefs,符号优先级

我正在使用 arm-none-eabi-ld 为一个非常具体的嵌入式架构链接一堆目标文件(具体来说是 Gameboy Advance)——我必须引用一堆已经定义的符号,以实现我我正在链接定义这些的脚本(例如整数除法,但结构/结构数组之类的东西也在那里)

出于我的目的,存在一个链接器脚本,它已经预定义了一堆这些符号,并且可以用作某种“共享链接器脚本”,以便构建不同的项目并将其集成到另一个项目中。问题是,它还定义了一堆我想在源文件中重新定义的符号。举一个实际的例子:

链接器脚本定义pokemon_front_sprites(它是一个类型的数组void*) - 但我也定义pokemon_front_sprites了 - 所以我决定用编译-z muldefs来避免它。如果两个符号指向不同的数据,当然会出现问题。

我现在的问题如下:我可以告诉 ld 喜欢我的符号而不是预定义的符号吗?与 链接时,我可以以某种方式分配优先级-T <script>吗?

0 投票
1 回答
4251 浏览

c++ - QMake - 如何以及在何处添加链接器标志?

我尝试在.pro我们项目的文件中添加以下内容:

我收到一个错误LINK : warning LNK4044: Nicht erkannte Option /Wl,--large-address-aware; wird ignoriert.

翻译: unrecognised option /Wl,--large-address-aware; gets ignored.

在此之前,我试图找出在哪里添加链接器选项,但它似乎只是放入文件中的普通变量.pro。我还搜索了一个搜索代码条目,其中该选项是.pro文件的一部分。

根据这篇文章,我添加了增加 32 位应用程序内存限制的选项...

我使用以下 Qt 工具包: Qt 套件

如何应用选项功能?

0 投票
1 回答
720 浏览

cmake - 使用 set_target_properties 和 LINK_FLAGS 时缺少目标的链接标志

我们有三个目标。一个是静态库,一个是共享库,一个是程序。我们正在尝试将目标特定的链接器标志添加到共享库和程序中。

当我们尝试附加我们需要的标志时:

它导致失败:

X = ${X} Y当我们由于缺少 而尝试使用语法时+= operator,属性会被静默删除:

例如,mapfile 丢失了,所以在 Solaris 下测试早期 Xeon 的结果是:

这是set_property,set_target_properties和的文档LINK_FLAGS。他们没有提供必要的细节,也没有提供示例。医生set_target_properties特别迷人。

我们如何添加目标特定的链接标志?

0 投票
1 回答
11054 浏览

c++ - 如何使用 `--wrap` 选项正确包装函数?

gcc 6.3 的手册页说:

所以我创建了一个简单的例子:

并编译它:

这给了我一个警告:

进展顺利。现在我建议这样的输出:

相反,我得到了这个:

我希望事情很清楚。我对警告感到困惑。通常,该__real函数应由链接器链接到foo(). 此外,调用foo()应该链接到__wrap_foo. 但是输出显示,它foo()正在被执行。

如何--wrap正确使用?

0 投票
1 回答
356 浏览

gcc - 加载共享库失败,符号未定义:__gcov_merge_add 错误

我正在尝试将 gcov 集成到现有的构建环境中。将 -fprofile-arcs 和 -ftest-coverage 添加到 CXXFlags 使我能够毫无问题地构建和生成 .gcno 静态文件。但是一旦我开始部署这个包,我就会遇到以下错误,无法加载共享库

错误消息未定义符号:__gcov_merge_add

有人可以帮我调试为什么缺少这个符号定义。

提前致谢!。

0 投票
0 回答
1188 浏览

mysql - 链接器错误:ld:找不到 -lssl 的库

在 macOS High Sierra 10.13.1 上链接我的程序时,我收到一条错误消息

链接器标志在 makefile-lssl中返回:mysql_config

makefile 已经运行了很长一段时间,所以我怀疑这个问题是由于最近升级 macOS 引起的。我还将mysql更新到最新版本5.7.20,但这并没有解决问题。