问题标签 [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 回答
1041 浏览

linux - CMake - 如何在链接器命令行中避免 CMAKE_CXX_FLAGS

我在使用 cmake / gcc / Linux 时遇到问题。

无论我尝试什么,我都无法摆脱链接器行上的 CMAKE_CXX_FLAGS 。在链接模式下调用 g++ 时,CMake 会不断传递它们。

我的 CMAKE_CXX_FLAGS 中有 -fopenmp 并且它不能出现在链接行上,因此 g++ 不会链接到 gomp(我使用的是英特尔的 iomp5)。

编辑:我尝试了以下 CMakeLists.txt 的开头,没有帮助:

谢谢

0 投票
2 回答
125 浏览

ios - 将 ios 核心框架添加到 podfile

我在我的 Podfile 中添加了一个 pod,并在构建时遇到了编译器错误:

然后我去Build Settings > Target > Debug > Other Linker Files手动添加-framework"CoreLocation"

在此处输入图像描述

编译器不再抱怨了。我认为它们被遗忘为吊舱的先决条件。

现在我不喜欢手动更改此值的事实。如果 Cocoapods ie 再次覆盖这个值,我可能会忘记这样做。有没有办法让我将CoreLocation框架添加到 Podfile 以便 Cocoapods 负责包含它?

谢谢

0 投票
1 回答
903 浏览

gcc - 代码::块链接选项

我在 Code::Blocks 17.12 中设置 SDL,在 Windows 上使用 MinGW,我看到了一组奇怪的链接器选项。我是新手,所以这可能很明显。加载一个项目,进入顶部的Project选项卡,单击Properties,然后单击Project's build options。如果你点击Linker settings,你会发现两件事。一个包含要链接的库列表,而另一个包含在命令本身中提供给链接器的选项列表。这是窗口的截图: 代码::块链接器选项

我发现删除链接库根本不会弄乱构建,而删除链接器选项会弄乱一切。这是只有 SDL 才会发生的事情吗?这两个部分有什么区别?这些标志告诉链接器做什么?

0 投票
0 回答
252 浏览

c++ - 源编译为“共享库”

我有一个简单的源文件'source.cpp:

现在我正在编译它:

结果在 Thunar 中显示为“共享库”类型。我可以使用 ./out 在 Shell 中运行它,但不能通过双击在 Thunar 中运行它。

ldd 说:

当我设置 -static 标志时,我得到一个典型的“程序”,它按预期在 Thunar 中工作,但肯定更大。ldd 说“程序没有动态链接”

几年前,我编译了这个源代码,但我不记得编译器选项了,我在 Typ 'Program' 中得到了一个没有静态链接的结果。ldd 说的和第一个例子一样。

那么,我该怎么做才能获得类型为“程序”的可执行文件,该可执行文件可以通过在文件管理器中双击来执行。

(我当然在所有示例中都设置了可执行标志)

0 投票
0 回答
189 浏览

gcc - 强制链接器/C 编译器包含已定义但未使用的内联函数?

我的项目由一个.c文件和一个文件中的数学库组成.h所有函数都声明为 inline。并非数学库中的每个函数都在主程序中使用。这些函数不会编译到可执行文件中。

但是,一些未使用的函数在调试中可能仍然有用,因为 gdb 的print语句可以计算任意表达式。有没有办法强制在最终的可执行文件gcc中包含所有定义的函数,包括inline函数,即使它们没有被使用?

(我没有使用任何-O标志。这两种情况都会发生clanggcc。我必须引入单独的链接步骤的解决方案很好。)

0 投票
0 回答
208 浏览

compilation - 使用 pgi 和 gcc 编译器重定位被截断为 fir 错误

gcc(7.2.0) 和 pgi(18.4) 编译器出现错误。我正在编译一个科学应用程序(在 fortran 中),它有一些依赖项。这些依赖项是使用 -fPIC 标志编译的。在编译主应用程序时,我收到一个错误“relocation truncated to fit”。当我添加标志 -mcmodel=medium(pgi) 时,编译成功。但是由于某些原因我不愿意添加这个标志。此外,当我使用 -fPIC 编译主应用程序时,我得到链接器错误和添加 --no-relax 标志的建议。添加相同的内容后,我仍然收到重定位错误。有没有什么方法可以在没有 -mcmodel=medium 标志的情况下编译?

编辑: 另外,当使用 gnu 编译器时,无论我使用什么 mcmodel,我都会收到重定位错误。这可能与旧链接器有关吗?因为我认为,应用程序及其依赖项是使用 64 位库编译的,而链接器是我假设使用 32 位库运行的。作为在执行 /ld-linux.so --list 时使用 pgi 成功编译的原因,我收到一条错误消息,指出无法映射到零填充页面。在运行可执行文件时,我收到一条消息,如 Killed。

0 投票
1 回答
1000 浏览

cmake - 如何将链接器选项添加到 CMake 引导程序?

我正在从 AIX 上的发布 tarball 构建 CMake 3.12.4。CMake 无法在机器上链接:

该错误在 IBM 技术说明中的ld: 0711-781 ERROR: TOC overflow中有详细说明。我想-bbigtoc为 cmake 配方添加链接器选项。

CMake 的引导程序似乎不接受LDFLAGS如下所示的链接器选项。

如何将链接器标志添加到引导进程?


以下是 CMake 引导程序接受的选项:


这是 CMake 链接错误:

0 投票
2 回答
1602 浏览

gcc - 在链接器脚本中定义了内存来源和长度

假设我在上面的链接器脚本中有一个部分。我可以定义 0x80000000 和 34K。我希望它看起来像,

所以我的问题是如何将这个定义放在链接器脚本中?我有一个自动生成链接器脚本的脚本,并且每次定义都会有所不同。

0 投票
2 回答
699 浏览

gcc - 我怎样才能让LD始终将入口点放在-Ttext的位置?

我正在编写自己的操作系统(静态地址),并且我很难让链接器始终将我的_start函数放在进程中我想要的位置。我在我的构建文件中指定了位置-Ttext 0x10000(在这个例子中我们只说 0x10000)。

通常这是可行的,但是当我使用-O2链接器时,会将我的main函数放在这个地址上。

那么我怎样才能确保它_start最终出现在这个地址上呢?是否可以不编写链接器脚本?

该函数_start对所有进程都是通用的,并且在程序返回而不是调用exit(). 我脑子里有一个解决方案,但我更愿意用链接器来代替它。

0 投票
1 回答
450 浏览

shared-libraries - 如何在运行路径标志中针对 $ORIGIN 指定共享库的目录?

该网页告诉我,我们可以使用$ORIGIN将可执行文件的目录作为搜索目录烘焙到可执行文件中。这条runpath命令可以写成:

但是我试图加载的共享库与可执行文件并不完全相同。它位于LIB可执行文件所在的子目录中。该网页没有告诉我该怎么做。我尝试了许多连接 LIB 的方法,但都无济于事,例如 "\$ORIGIN/LIB"、"\$ORIGIN"/LIB、\$ORIGIN/LIB 或 "\$ORIGIN/LIB/"。我也没有从谷歌搜索中找到任何线索。你能告诉我 $ORIGIN 在运行路径标志中指定相对于它的目录的正确语法吗?谢谢你。

PS:我正在使用 GNU make 4.1 和 GNU ld 2.26.1 开发 ubuntu 16.04。