标签: compiling

如何仅重定向 stderr?

我在这样做时遇到了一些麻烦。我需要运行一个已编译的 .java 文件并仅将 stderr 重定向到一个名为 error 的文件。所以.java 文件被命名为javaProgram.java。

这是我尝试过的:

java javaProgram 2> error
Run Code Online (Sandbox Code Playgroud)

然而当我

cat error
Run Code Online (Sandbox Code Playgroud)

似乎那里有东西,即使我知道特定的 .java 文件没有错误的事实。难道我做错了什么?我希望这个错误文件显示的是错误,而不是其他任何东西。

compiling bash io-redirection

15
推荐指数
1
解决办法
2万
查看次数

在 RPM .spec 中设置 SELinux 上下文的正确方法是什么?

我正在尝试构建一个针对 RHEL4 和 5 的 RPM。现在我打电话chcon来,%post但多个谷歌条目说“这不是你应该做的”,在正确的方式上的帮助非常有限。我还注意到,fixfiles -R mypackage check当文件正确时说文件是错误的(正如预期的那样;RPM DB 没有意识到我想要什么)。

  • 我说具体RHEL4,因为它并没有具备semanage这似乎是正确的方式去做一个。(添加新策略,然后restorecon%post.

    • 我也不需要我自己的上下文,只需要httpd_cache_t一个非标准目录。
  • 我还看到了“让我们cpio来处理它”——但后来我遇到了一个新问题,即非根 RPM 构建用户无法chcon在构建目录上运行。我作弊并sudo在规范文件中存在,但这似乎无关紧要。

compiling rpm selinux

14
推荐指数
1
解决办法
4506
查看次数

从apue编译代码

刚刚我开始阅读这本书:UNIX® 环境中的高级编程。我想尝试运行它的第一个代码示例。我正在运行 Scientific Linux 6.4。

我下载了源代码,正如它在自述make文件中所说的那样,我在未压缩的文件中运行。

我写了第一个程序(一个模拟ls命令)

#include "./include/apue.h"
#include <dirent.h>

int
main(int argc, char *argv[])
{
    DIR           *dp;
    struct dirent *dirp;

    if(argc!=2)
        err_quit("usage: test directory_name");

    if((dp=opendir(argv[1]))==NULL)
        err_sys("Can't open %s", argv[1]);

    while((dirp=readdir(dp))!=NULL)
        printf("%s\n", dirp->d_name);

    closedir(dp);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

并将其放入未压缩的文件中。正如书中所建议的那样,我接着跑:gcc myls.c. 但我收到此错误:

# gcc myls.c
/tmp/ccWTWS2I.o: In function `main':
test.c:(.text+0x20): undefined reference to `err_quit'
test.c:(.text+0x5b): undefined reference to `err_sys'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我想知道如何解决这个问题。我还希望能够运行我在任何目录中编写的代码。

compiling

14
推荐指数
1
解决办法
2万
查看次数

为 Ralink RT2870 编译驱动程序时出错

我正在尝试在 Kali Linux 上为 Rosewill RNX-N600UBE 无线卡(Ralink RT2870 芯片组)安装驱动程序。我从他们的网站下载了驱动程序并解压/解压了它们,但是现在当我尝试运行“make”命令时出现此错误。

/home/fox/System/2011_0427_RT3572_Linux_STA_v2.5.0.0.DPO/os/linux/../../os/linux/rt_linux.c:1156:20: error: incompatible types when assigning to type ‘int’ from type ‘kuid_t’
/home/fox/System/2011_0427_RT3572_Linux_STA_v2.5.0.0.DPO/os/linux/../../os/linux/rt_linux.c:1157:20: error: incompatible types when assigning to type ‘int’ from type ‘kgid_t’
make[4]: *** [/home/fox/System/2011_0427_RT3572_Linux_STA_v2.5.0.0.DPO/os/linux/../../os/linux/rt_linux.o] Error 1
make[3]: *** [_module_/home/fox/System/2011_0427_RT3572_Linux_STA_v2.5.0.0.DPO/os/linux] Error 2
make[2]: *** [sub-make] Error 2
make[1]: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)

linux compiling wifi drivers

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

什么是二进制包?如何构建它们?

我想获取有关二进制包的详细信息并在 linux 上运行它们。我正在运行 Debian 基础(Ubuntu/Linux mint)Linux 操作系统。

  1. 如何从源代码构建二进制包?我可以直接下载应用程序(如 firefox 等)和游戏(如 boswars 等)的二进制包吗?
  2. 我运行一些“xyz.linux.run”格式的直接包这些包是什么?它们是否独立于依赖项?还是预先构建的二进制包?
  3. 如何在linux上直接通过“xyz.linux.run”来构建可以在linux操作系统上运行的它们。
  4. 二进制包和 deb 包有什么区别?

compiling packaging package-management binary deb

14
推荐指数
2
解决办法
5万
查看次数

安装命令中的 ${D} 变量

我已经看到在多个 yocto 配方中使用了以下安装命令

install -d ${D}${libdir}
Run Code Online (Sandbox Code Playgroud)

我知道 install 命令及其用途,但是我无法理解 ${D} 变量的用途,因为它通常没有在配方中定义。有人可以解释这个shell变量的用途吗?

compiling yocto

14
推荐指数
2
解决办法
1万
查看次数

为什么我的初始 ramdisk 这么大?

我正在运行 Ubuntu 11.10,它带有内核版本3.0.0-14。我从3.1.0分支下载并构建了一个内核。安装新内核后,我看到我的/boot/initrd.img-3.1.0文件很大。它是 114MB,而我/boot/initrd.img-3.0.0-14-generic的大约是 13MB。我想摆脱臃肿,这显然是不必要的。

在构建新内核时,我将我的/boot/config-3.0.0-14-genericto复制到.config我的构建目录中,以保留我原始内核的配置。我运行make oldconfig,为所有新选项选择默认值,然后构建内核。

查看每个 initrd cpio 档案中的文件大小,我看到我所有的 .ko 模块在 3.1.0 ramdisk 中的大小都比 3.0.0-14 大。我假设在我的配置文件中检查了一个不必要的调试标志,但我没有看到任何在 3.0.0-14 配置文件中尚未启用的不同之处。

/boot/config-3.0.0-14-generic在这里:http : //pastebin.com/UjH7nEqd

/boot/config-3.0.1在这里:http : //pastebin.com/HyT0M2k1

谁能解释所有不必要的膨胀来自哪里?

compiling kernel initrd

13
推荐指数
1
解决办法
4876
查看次数

从源代码编译对已安装应用程序的影响

我使用 Ubuntu 12.04。假设我package x已从 1.7 版的存储库(及其所有依赖项)安装,但我需要一些仅在 1.8 版中可用的功能,因此我下载源 tar 并编译它:

./configure  
make  
make install
Run Code Online (Sandbox Code Playgroud)
  • 这会覆盖现有的 1.7 二进制文件吗?
  • 如果现有的二进制文件被覆盖,包管理器是否反映了新版本 (1.8) 并且可以package x在未来由包管理器更新?
  • 如果package y有 - 的依赖,package x 1.8它会被满足吗?

我一直试图在网上找到一个很好的来源来解释这一点。如果您有任何建议,请让我知道。

compiling ubuntu software-installation package-management

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

无需“干净”即可重新构建 Linux 内核

我正在构建基于 4.11 的自定义内核(对于 Mintx64,如果重要的话)。我已经编译并安装了它以证明它有效。现在我对几个文件做了一些小的更改(在驱动程序和网络子系统中,这就是我首先需要编译自定义内核的原因!)

现在我想构建修改后的内核。但是当我跑

fakeroot make -j5 deb-pkg LOCALVERSION=myname KDEB_PKGVERSION=1 
Run Code Online (Sandbox Code Playgroud)

构建系统似乎是从“清理”开始的——处理了一大堆东西,所以我很快就停止了它。不幸的是,我正在使用的计算机没有配备良好的 CPU,并且从头开始构建需要很多小时。因此,如果可能的话,我宁愿避免再次这样做!

是否可以只进行增量构建而没有一切都“干净”,或者这是内核构建系统的要求吗?

我得到的输出是:

CHK      include/config/kernel.release
make clean
CLEAN .
CLEAN arch/x86/lib
...
Run Code Online (Sandbox Code Playgroud)

compiling kernel linux-mint

13
推荐指数
1
解决办法
5699
查看次数

寻找构建最小 linux 桌面的工具

我越来越不满意这样一个事实,即配置我的 linux桌面通常意味着消除膨胀而不是添加和调整功能。我得出的结论是,我宁愿从一些非常小的东西开始,然后添加我了解的提供附加功能的包。

所以我正在寻找一个非常小的桌面发行版,或者甚至是更好的工具来构建这样的发行版。或者换句话说,我想用运行前构建工具替换包管理器

包管理器不会受到伤害,但我正在寻找一个专注于高级前期配置而不是庞大的包存储库的发行版

我看过各种最小的桌面发行版,但它们似乎都解决了不同的问题,例如设计为在旧硬件上运行或从 cd/stick/ramfs 运行。但我不想要最小分布,因为我有旧硬件,而是因为我想知道各个部分的作用。从主内存运行也无济于事,我想要一些最小简单的东西。

由于似乎没有为极简主义设计的发行版,我认为一个明显的选择是从头开始构建Linux。然而,虽然我希望构建过程是高度定制的,但它也必须是自动化的,因为我必须多次运行它,直到我有一个我满意的系统。

虽然存在可以自动化构建过程的 lfs 工具,但它并不是真正不可或缺的一部分。基本上,它从文档中提取构建系统所需的步骤,然后自动执行。我正在寻找更强大和更先进的东西,而且也不喜欢编辑 xml。

经过一番搜索,我发现Buildroot旨在构建嵌入式发行版,但也允许安装 X11。在构建工具链和 rootfs 之前,可以make menuconfig像 Linux 一样使用该构建进行配置。这看起来与我的想法完全一样,只是它旨在为嵌入式系统进行交叉编译。

我目前想到的是使用 buildroot,但首先删除所有嵌入的特定部分,用 lfs 中的相应部分替换它们。很多工作。

最重要的是, buildroot 也存在一些问题(从我的限制测试中可以看出),仅启用附加包会导致从头开始重建漏洞,但对于琐碎的更改,我想避免这种情况。

在我投入时间之前,我将继续寻找具有预安装构建工具(如 buildroot)的桌面发行版,它是用于构建桌面发行版的 buildroot 的替代/分叉。

编辑:到目前为止,答案指向我的发行版,例如 Gentoo,这是我目前正在使用的发行版。但我正在寻找Gentoo、Arch、Debian 等发行版的替代品,因为这些发行版不够小。还必须在安装后自定义这些发行版。我想要一些可以在安装前自定义的东西。

虽然所有提到的分布都是精细分布,但它们并不是我想要的。我正在寻找的是"buildroot for desktop"。如果您不知道 buildroot 是什么,那么您可能无法提供让我满意的答案。

另外我不认为这个问题是主观的。我根本找不到任何接近我需要的东西,因此请您向我指出可能至少提供我需要的部分内容的项目。

linux compiling desktop distribution-choice small-distribution

12
推荐指数
2
解决办法
2614
查看次数