目前,我尝试使用Cross Linux from Scratch 中的说明从头开始构建嵌入式 Linux 。
一切正常,直到我尝试编译 GCC 交叉编译器。我想为 Beagleboard-xM 构建 Linux...所以我选择了以下设置:
export CLFS_ABI="aapcs-linux"
export CLFS_HOST="x86_64-cross-linux-gnu"
export CLFS_TARGET="armv7a-unknown-linux-uclibceabi"
export CLFS_ARCH="arm"
export CLFS_ENDIAN="little"
export CLFS_ARM_ARCH="armv7"
export CLFS_ARM_MODE="arm"
export CLFS_FLOAT="hard"
export CLFS_FPU="neon"
Run Code Online (Sandbox Code Playgroud)
不,只要我尝试运行此页面上的说明,命令就会make all-gcc all-target-libgcc出错。
checking for armv7a-unknown-linux-uclibceabi-gcc... /mnt/clfs/sources/gcc-build/./gcc/xgcc -B/mnt/clfs/sources/gcc-build/./gcc/ -B/mnt/clfs/cross-tools/armv7a-unknown-linux-uclibceabi/bin/ -B/mnt/clfs/cross-tools/armv7a-unknown-linux-uclibceabi/lib/ -isystem /mnt/clfs/cross-tools/armv7a-unknown-linux-uclibceabi/include -isystem /mnt/clfs/cross-tools/armv7a-unknown-linux-uclibceabi/sys-include
checking for suffix of object files... configure: error: in `/mnt/clfs/sources/gcc-build/armv7a-unknown-linux-uclibceabi/libgcc':
configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.
make: *** [configure-target-libgcc] Error …Run Code Online (Sandbox Code Playgroud) 我想在我的 Debian Wheezy 7.1.0 系统上安装 GCC 4.8.1。我系统上安装的当前 GCC 版本是 4.7.2。我看到 gcc-4.8.1 在 Debian 存储库中可用。有人可以告诉我如何执行此更新吗?
我如何gcc在 FreeBSD 上安装最新版本并设置系统,以便使用这个最新版本来编译更多程序?
在撰写本文时,最新版本gcc是 4.9.0。我使用 FreeBSD 10.0。
我实际上需要g++,C++ 编译器;但我需要gcc49为它安装类似package 的东西,对吗?
人们可以在互联网上找到几个线程,例如:
http://www.gossamer-threads.com/lists/linux/kernel/972619
人们抱怨他们无法使用 -O0 构建 Linux,并被告知这不受支持;Linux 依靠 GCC 优化来自动内联函数、删除死代码,以及执行构建成功所需的其他操作。
我已经为至少一些 3.x 内核亲自验证了这一点。如果使用 -O0 编译,我尝试过的那些会在几秒钟的构建时间后退出。
这通常被认为是可接受的编码实践吗?编译器优化(例如自动内联)是否具有足够的可预测性以供依赖;至少在只处理一个编译器时?未来版本的 GCC 有多大可能破坏具有默认优化(即 -O2 或 -Os)的当前 Linux 内核的构建?
还有一个更迂腐的注释:由于 3.x 内核不能在没有优化的情况下编译,它们是否应该被视为技术上不正确的 C 代码?
我写了一篇《你好,世界!》myCFile.cDebian 操作系统 x86 嵌入式板上的C 文件。
#include <stdio.h>
int main()
{
printf("hello\n")
}
Run Code Online (Sandbox Code Playgroud)
我编译程序:gcc myCFile.c
然而,
tester@localhost:~/test$ ./a.out
-bash: ./a.out: Permission denied
tester@localhost:~/pravin$ ls -lrt
total 44
-rwxrwxrwx 1 tester test 54 Sep 7 07:33 myCFile.c
-rwxrwxrwx 1 tester test 16608 Sep 7 07:33 a.out
Run Code Online (Sandbox Code Playgroud)
但是,如果我复制a.out到/run/user/1000,我可以执行它。
tester@localhost:/run/user/1000$ ls
a.out bus gnupg systemd
Run Code Online (Sandbox Code Playgroud)
另外,当我用root用户编译C文件并执行它时,我可以执行它。我可以执行它。
root@localhost:~# gcc myCFile.c
root@localhost:~# ./a.out
hello
root@localhost:~#
Run Code Online (Sandbox Code Playgroud)
是不是跟NOEXEC国旗有关系?
我的/etc/fstab文件:
# Begin /etc/fstab
/dev/root / ext4 defaults …Run Code Online (Sandbox Code Playgroud) 我在 Linux 中为一台设备编写了一个驱动程序。如何创建(使用gcc).ko文件以便将其插入内核?
我想在 Arch Linux 中编译一个 C++ 程序,但是没有像 Ubuntu 存储库中那样的“g++”包。
使用-x太多也行不通。像这样:
gcc -x c++ -o myprog myprog.cpp
Run Code Online (Sandbox Code Playgroud) 不久前发布了新的 Guix 版本。我有一个想法,如果我可以将 glibc、gcc 和 guix 引导到 HURD 和 Mach,我就可以拥有一个非 Linux GNU 系统。但我还需要一些软件,如 bash、emacs、binutils、coreutils、init 系统。是否有任何依赖于 linux 的系统调用?我能像在 LFS 中那样做吗?
请原谅我的无知...我只使用 Solaris 来测试我感兴趣的 C/C++ 库。我不是 Solaris 管理员或 Solaris 用户。
我在 Solaris 11.3、x86 上安装了 GCC-5,因为我需要一个支持的 C++ 编译器-std=c++11(请参见下面的包输出)。Sun 的原生 GCC 是 4.8,它不能很好地支持 C++11(或根本不支持)。
不幸的是,我在安装后找不到它:
$ g++-5 --version
-bash: g++-5: command not found
$ sudo find /usr -name gcc-5
$ sudo find /bin -name gcc-5
$
Run Code Online (Sandbox Code Playgroud)
为了完整性:
$ /bin/gcc --version
gcc (GCC) 4.8.2
...
$ ls -l /usr/bin/gcc
lrwxrwxrwx 1 root root 18 Jun 7 2016 /usr/bin/gcc -> ../gcc/4.8/bin/gcc
$ which gcc-5
no gcc-5 in /usr/local/bin /usr/local/sbin /bin /sbin /usr/bin /usr/sbin …Run Code Online (Sandbox Code Playgroud) 有两个文件,一个编译并链接,gcc另一个手动使用nasm,ld我得到
这两件事有什么区别?我可以看到readelf -h那个是
DYN (Shared object file)EXEC (Executable file)我可以在维基百科ET_DYNET_EXEC上看到这些记录为和。这两者之间有什么实际区别?