Binutils / Linker - 静态解析外部符号引用
背景 我正在开发一些针对具有最新 GNU 工具链的旧嵌入式设备的项目。 由于内存非常有限,代码被分为主要部分和一些覆盖层,其中覆盖层被压缩以节省空…
当用 C/C++ 编写函数时使用内联汇编(x86-64),当需要时选择任何 GPR(rax 到 r15)是否安全?
我对在 C/C++ 中编写包含内联汇编的函数的概念很陌生,我想知道使用所有可用的通用寄存器是否安全。 (从rax到r15) 据我所知,所有变量/对象/数据实…
Buildroot 交叉编译 - 编译可以工作,但链接无法找到各种 SDL 函数
我有 一些代码,我可以与使用 uClibc 的旧工具链进行交叉编译,但该项目是转向 musl libc,我似乎无法使用该工具链编译代码。它总是在链接阶段失败,…
gcc c++当“-fpermissive”和“-Werror”同时打开时,如何禁用“-Wno-error=permissive”错误? (在 C 与 C++ 中将指针传递给 R 值)
对于这个结构和函数: typedef struct data_s { int i1; int i2; } data_t; void print_data_passed_by_ptr(const data_t *data) { printf(" i1 = %i\…
ELF 的 gnu_debuglink 部分给了我奇怪的名字
我使用过 Ubuntu 20.04.3,当我运行时, readelf --string-dump=.gnu_debuglink /usr/bin/cp 我得到了奇怪的调试文件名,同时期待类似 cp.debug 的内…
如何将 gps.h 纳入 Yocto 配方构建中?
我构建了一个简单的配方,只要我不需要 gps.h 就可以使用: recipes/foo (dunfell) $ cat foo_3.0.0.bb DESCRIPTION = "FOO Daemon" LICENSE = "CLOSE…
对于 gcc,链接时间优化 (-flto) 是否与整个程序优化 (-fwhole-program) 一样优化?
我正在寻找创建一个在 Linux 下运行的高度优化的程序,并且想知道是否应该单独编译多个 C 文件,或者将其组合成一个整体 C 文件,然后进行编译?例如…
gcc 中 std::sqrt、std::hypot 等的意外 constexpr 可用性
std::sqrt (以及类似的 std::hypot 和其他 函数)(还)不是 constexpr。 那么,基本上为什么这在 gcc 中有效? #include int main() { static const…
如何输出 CMake 项目创建的最终可执行文件的程序集列表?
我目前正在开发一个嵌入式项目,使用 avr-gcc 编译器在 Atmel ATMega328p 微控制器上运行。我决定使用 CMake 创建我的构建系统,因为这可以轻松地将我…
是否可以确定 C 变量是否静态声明?
我有一个结构类型,需要静态声明并在整个程序中持续存在。 struct Foo。 我还编写了一个 API 函数来与该结构交互: void bar(Foo *foo) 我在其他 API …
AMD64 -- nopw 汇编指令?
在此编译器输出中,我试图了解 nopw 指令的机器代码编码是如何工作的: 00000000004004d0 : 4004d0: eb fe jmp 4004d0 4004d2: 66 66 66 66 66 2e 0f …
当指针为 __restrict 类型时,编译器会从 std::copy 生成对 memcpy 的调用?
当我将 __restrict 添加到函数参数时,gcc 编译器会生成对 memcpy 的调用。 编译器/标准库如何确定它可以在适当的时候生成对 memcpy 的调用? void ca…
`ld` 未定义引用错误,但库由 CMake 链接并且符号存在
我有一个像这样的 CMake 文件: cmake_minimum_required(VERSION 3.12) project(cpp-service VERSION 0.1.0) add_compile_definitions(OPENVDB_7_ABI_…
gcc 无法通过成员指针获取属性的 constexpr 地址?
我试图在编译时通过成员指针获取对象属性的地址。以下代码在 MSVC 上可以正常编译,但在 GCC 上则不行: #include struct S { int i = 42; }; int mai…