问题标签 [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.
c++ - 为什么在 Xcode 11.3 Step Over(f6) 中作为 Step Into(f7) 工作?
在调试 Step Over(f6) 时更新到 xcode 11.3 时开始表现类似于 Step Into(f7)。
重现步骤
为 macOS 命令行工具创建一个新的 Xcode 项目
用这个改变 main.cpp
/li>转到项目构建设置并添加
-Wl,-no_function_starts
到“其他链接器标志”test
在调用函数的行添加断点并开始调试当断点被击中时尝试 Step Over(f6)
它的行为类似于 Step Into(f7) 并进入测试函数,而不是进入下一个 return 语句。
删除-no_function_starts
标志解决了问题
但我想知道为什么使用标志?它的描述在这里说
-no_function_starts
默认情况下,链接器会在最终链接映像的 LINKEDIT 中创建一个函数起始地址压缩表。此选项禁用该行为。
这个函数起始地址表的重要性是什么?为什么有人会禁用它?它如何影响跨步的 xcode 行为?
macos - 在 Mac OS 链接器上使用 gcc 编译代码时链接自定义静态库失败
这是我的 C 语言项目文件的文件结构:
首先是一个 fullCourse 文件夹
fullCourse 文件夹包含三个文件夹:
1. include
2. src
3. lib
4. test
in include 文件夹:
它包含一个头文件:temp.h
temp.h 的代码如下:
在 src 文件夹中:
它包含一个源文件: temp.c
的 temp.cc 代码如下:
然后留在同一个文件夹中,创建 .o 文件如下:
下一步是将这个 temp.o 文件移动到 lib 文件夹,如下所示:
比停留在 lib 文件夹中创建了一个存档(或库)文件,如下所示:
比在 test 文件夹中写了一个源代码来测试 tempTest.c 的库(tempTest.c)
代码如下:
比留在测试文件夹中尝试编译它如下:
但代码未编译,显示以下错误:
请帮我解决这个问题。
cygwin - --export-dynamic 和 --export-all-symbols 之间有什么区别?
使用 gcc 或 clang 在 Cygwin 上编译后,ld 抱怨
按照建议更改链接器标志可修复此行为,但我不确定这是否正确。因此问题很简单:
--export-dynamic
和有什么区别--export-all-symbols
?
c - 如何在 IAR 编译器中按特定顺序放置变量?
我正在尝试将一些变量放入特定的 ROM lication 中。
在链接器配置文件中:
在源文件中:
生成的 .map 文件:
无论如何它都有效 - 变量位于正确的部分。
但是由于变量的大小,链接器已将其整理好。
有没有办法告诉链接器不要更改变量的顺序,所以它们会以与源文件中声明的顺序相同的顺序出现在映射文件中?
目标是:
c++ - 未使用的 C++ 静态成员函数/变量未优化
我启用了编译器和链接器优化,希望从我的 ARM32 可执行文件中删除所有未使用的代码/数据。从我的映射文件中,我可以看到确实丢弃了未使用的代码部分,因此优化标志大部分都在工作,除了未使用类的静态成员函数/变量。任何关于如何摆脱这种情况的想法都将不胜感激,因为这在资源受限的嵌入式平台上加起来相当多!
这是一个使用 g++ 7.5 编译的 MVCE。在 Ubuntu 18.04 上
使用优化标志编译以删除未使用的代码
检查静态成员变量是否被编译成可执行文件
c - 几个基本的 GCC 标志问题
我正在尝试编译并运行我的 C 程序。该程序使用线程。我正在使用带有 Ubuntu 终端的 WSL 运行 Windows 10。(也尝试使用 Ubuntu 虚拟机)这是我用于所有程序的“默认”Makefile 格式(更改每个程序的名称和标志)
这是我第一次在 C 中使用线程,这让我发现了 -pthread。我发现你需要将它添加到标志中(我用 CFLAGS 做了)。出于某种原因,当我在上面运行这个 makefile 时出现错误,找不到 pthread 函数,我注意到修复它的方法是通过更改这一行:
最后添加 pthread 。所有这一切都让我对标志进行了一些研究,在搜索 gcc 的手册页和谷歌之后,我发现这些问题没有简单的答案:
- 为什么我需要将 -pthread 添加到 .o 任务和 .c 任务?为什么仅将其添加到一个还不够?
- 什么是 -w 标志?我知道它代表“警告”,但 -w 和 -Wall 之间有什么区别?
- 什么是-I。旗帜?再次,我发现它代表“包含”,但我不确定它在做什么。我的 makefile 使用或不使用该标志。
谢谢你。
c++ - 将链接器参数添加到 gradle
我正在尝试使用 gradle 在 Linux 上编译和链接应用程序。编译部分工作正常,但是当它链接时,它会得到未定义的项目,因为链接器不包含库。我尝试了多种方法来添加它(见下文),但它们都不起作用。你知道我需要做什么来为喜欢的人包含库吗?
linux - 为什么 gcc 默认与“-z now”链接,虽然惰性绑定是 ld 的默认值?
man ld
有以下要说的-z lazy
:
...告诉动态链接器将函数调用解析推迟到调用函数时...延迟绑定是默认值。
另一方面,gcc --verbose main.c
传递-z now -z relro
给 ld 的 main.c 为空main()
我在默认安装 gcc 的 Ubuntu 18.04 和 19.04 中看到了这一点。
所以-z lazy
可能是 ld 的默认值,但是 gcc 在哪里/为什么将其更改为-z now -z relro
?
android - ld Mac OS 10.13.6:未知选项:-EL
我试图在我的 iMac 上编译 android linux 内核(4.4),但它一直显示这个错误,这里是完整的输出:
有什么想法可能导致这种情况吗?
提前致谢
makefile - 链接编辑器 (LD) 参数是什么意思?
我编写了 NASM(网络汇编器)程序,出于某些原因,我需要使用一些用 C 编写的函数。因此,我尝试使用ld链接编辑器将编译的 C 对象文件与编译的汇编对象链接起来。我是这样做的:
ld -m elf_x86_64 -lc --dynamic-linker=/lib64/ld-linux-x86-64.so.2 object_files -o program
.
在我获得必要的参数之前,它不想链接和工作足够长的时间。现在,此参数集可以按预期工作。但我不明白-lc
and的含义--dynamic-linker=/lib64/ld-linux-x86-64.so.2
。他们在做什么 ?