相关疑难解决方法(0)

没有libc编译

我想在没有(g)libc的情况下编译我的C代码.如何停用它以及哪些功能依赖于它?

我尝试了-nostdlib但它没有帮助:代码是可编译的并运行,但我仍然可以在我的可执行文件的hexdump中找到libc的名称.

c gcc glibc libc demo

53
推荐指数
2
解决办法
3万
查看次数

如何在不使用gcc的情况下将使用C标准库的气体组件程序与ld链接?

作为一个练习来更准确地学习c程序如何工作以及程序能够使用libc必须存在的最低内容级别,我自己尝试使用gas和ld主要在x86程序集中进行编程.

作为一个有趣的小挑战,我已成功组装并链接了几个链接到不同自制动态库的程序,但是我无法从头开始编写程序以使用libc函数调用而无需直接使用gcc.

我了解单个c库函数的调用约定,并通过使用objdump和readelf彻底检查了gcc编译的程序,但是在气体汇编文件中包含哪些信息以及要调用的参数方面没有任何进展在ld中成功链接到libc.有人对此有任何见解吗?

我在x86机器上运行Linux.

assembly gnu-assembler ld binutils

13
推荐指数
2
解决办法
8854
查看次数

静态变量未初始化

我正在为Raspberry Pi开发一个小内核作为学校项目.我们遇到了静态变量初始化的问题:它们似乎根本没有初始化.我找到了一些相关的主题,但到目前为止还没有人提出解决方案,虽然有助于我理解这个问题(至少,我认为).

所有代码都可以在此存储库中找到,但我将在此处尝试总结相关代码.

从显示问题的项目中提取的代码:(kernel/src/kernel.cpp)

static int staticVal = 42;

void doStuff() { // Prevent the compiler from optimizing the value of staticVal
    staticVal++;
}

__attribute__((section(".init")))
int main(void) {
    //...
    gpio::blinkValue(staticVal); // Displays the value through LEDs
    //...
}
Run Code Online (Sandbox Code Playgroud)

然后使用(例如)编译代码

arm-none-eabi-g++ -O2 -std=c++11 -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -nostartfiles -Wall -Wextra -pedantic -I src/ -I uspi/include -DHW_PI_1B -c src/[file].cpp -o _build/[file].o
Run Code Online (Sandbox Code Playgroud)

并使用相同的选项内置到二进制文件中,最后组装成kernel.img使用

arm-none-eabi-ld --no-undefined _build/master.bin -Map _build/kernel.map -o _build/output.elf -T kernel.ld
arm-none-eabi-objcopy _build/output.elf -O binary kernel.img
Run Code Online (Sandbox Code Playgroud)

(您可以直接阅读Makefile以获取更多详细信息:github.com/tobast/sysres-pikern/blob/staticNotWorking/kernel/Makefile).

使用的链接器脚本也可能是问题所在,因为我们试图找出如何在不知道我们在做什么的情况下编写工作脚本(我们使用来自另一个项目的修改过的链接器脚本):github.com/tobast/sysres …

c++ arm compilation

5
推荐指数
1
解决办法
815
查看次数

标签 统计

arm ×1

assembly ×1

binutils ×1

c ×1

c++ ×1

compilation ×1

demo ×1

gcc ×1

glibc ×1

gnu-assembler ×1

ld ×1

libc ×1