草庐IT

gnu-make

全部标签

linux - 第一个 make binary 是从哪里来的?

我必须构建gnumake由于过于复杂的原因无法在此处解释。我注意到要构建它,我需要以传统方式使用make命令本身:./configuremakeinstall如果我还没有make二进制文件怎么办?第一个makebinary是从哪里来的? 最佳答案 第一个gcc二进制文件来自同一个地方。第一个make可能是使用shell脚本创建的。之后,make将“制造”自己。当平台成为“自托管”时,这是系统开发方面的一项显着成就。也就是平台可以自己搭建。诸如“makemake”和“gccgcc.c”之类的东西。许多语言编写者会用另一种语言(比如C)

Linux GNU getopt : ignore unknown optional arguments?

是否可以使用GNUgetopt忽略未知的可选参数?我有一个脚本scriptA.sh,它有可选参数--optA,--optB,--optC,--optD。我想编写一个包装器wrapperA,它带有两个可选参数--optX和--optY,它们调用scriptA。但是,我不想在包装器内声明scriptA的所有可选参数。特别是,如果在wrapperA中,我用指定可选参数getopt--longoptionsoptX:,optY:电话wrapperA--optX--optA--optB返回错误getopt:unknownoption--optA是否可以强制GNUgetopt忽略未知参数并将它们放

linux - cmake "make install"到远程机器?

使用makeinstall我可以将我的二进制文件、配置等复制到目标文件夹以执行。现在我遇到以下情况:我们将虚拟机设置为构建主机,将不同的真实Linux机器设置为目标平台。我想让makeinstall将文件直接复制到远程计算机上的文件夹中(通过scp或类似方式)。我怎样才能做到这一点? 最佳答案 你经常可以做makeinstallDESTDIR=/tmp/mydest/然后归档目标目录tarczvf/tmp/mydest.tgz-C/tmpmydest然后将该存档复制到远程位置scp/tmp/mydest.tgzremote:tmp/

linux - 如何禁止系统调用,GNU/Linux

我目前从事类似ACM的公共(public)编程竞赛系统的后端工作。在这样的系统中,任何用户都可以提交代码源,该代码源将自动编译和运行(这意味着不执行人眼预审核)以试图解决一些计算问题。后端是一台GNU/Linux专用机器,将为每个参赛者创建一个用户,所有这些用户都是用户组的一部分。任何特定用户发送的源代码将存储在用户的主目录中,然后编译和执行以针对各种测试用例进行验证。我想要的是禁止对源代码使用Linux系统调用。这是因为问题需要独立于平台的解决方案,而为不安全的源启用系统调用是潜在的安全漏洞。这样的源代码可能会成功地放置在FS中,甚至可以编译,但永远不会运行。我还想在发送包含系统调用

linux - 使用 GNU/Linux 系统调用 `splice` 在 Haskell 中进行零拷贝套接字到套接字数据传输

更新:尼莫先生的回答帮助解决了问题!下面的代码包含修复!请参阅下面的nbFalse和nbTrue调用。还有一个名为splice的新Haskell包(它具有操作系统特定和可移植的最著名套接字到套接字数据传输循环的实现)。我有以下(Haskell)代码:#ifdefLINUX_SPLICE#include{-#LANGUAGECPP#-}{-#LANGUAGEForeignFunctionInterface#-}#endifmoduleNetwork.Socket.Splice(Length,zeroCopy,splice#ifdefLINUX_SPLICE,c_splice#endif)

c++ - 为什么 GNU binutils 和 GDB 合并为一个包?

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git请特别注意标签部分。这个决定背后的理由是什么?合并是否会影响构建最新binutils和GDB的建议方法?(事实上​​,当我checkoutbinutils-2_25_1并运行makeall&&makeinstall时,我也得到了gdb。) 最佳答案 我做了转换。我将它们加入存储库的原因部分是历史原因,部分是实际原因。从历史上看,gdb和binutils几乎一直在一起。当它们在Cygnus中维护时,它们位于单个源代码树(称为

c - 哪些可用的 GNU C 扩展在 C99 中实现起来并非易事?

为什么Linux内核只能用GCC编译?某些项目真正需要哪些GNUC扩展?为什么? 最佳答案 这是Linux内核使用的几个gcc扩展:内联汇编gcc内置函数,例如__builtin_expect、__builtin_constant、__builtin_return_address功能属性来指定例如使用什么寄存器(例如__attribute__((regparm(0)),__attribute__((packed,aligned(PAGE_SIZE)))))特定代码取决于gcc预定义的宏(例如,某些版本中某些gcc错误的解决方法)sw

linux - QT版本未正确安装,请运行make install

我使用qt-creator-linux-x86-opensource-2.6.1.bin的下载副本安装了QT-creatorsudo./qt-creator-linux-x86-opensource-2.6.1.bin在Ubuntu11.04中我尝试在QT-Creator/Build/QT-versions配置中添加QT版本,它要求提供qmake可执行文件。我安装它使用:sudoapt-getinstallqt4-devel在/usr/bin/qmake中部署了qmake我在QT-Creator/Build/QT-versions配置中选择它作为手册,Qt-4.7.2(System)/

Linux、GNU GCC、ld、版本脚本和 ELF 二进制格式——它是如何工作的?

我正在努力了解更多关于Linux中的库版本控制以及如何将其全部投入使用的信息。这是上下文:--我有两个版本的动态库,它们公开了同一组接口(interface),比如libsome1.so和libsome2.so。--应用程序链接到libsome1.so。--此应用程序使用libdl.so动态加载另一个模块,比如libmagic.so。--现在libmagic.so链接到libsome2.so。显然,如果不使用链接器脚本隐藏libmagic.so中的符号,在运行时所有对libsome2.so中接口(interface)的调用都将解析为libsome1.so。这可以通过检查libVersi

linux - 如何避免二进制文件中的 STT_GNU_IFUNC 符号?

我需要部署到RedHat4.1.2box(它有gcc4.1.2)。我在Ubuntu11.10上使用GCC4.6.1进行开发。不幸的是,我的构建过程创建的一些二进制文件在RedHat机器上不可用。原因似乎是ABI更改,根据anotherStackoverflowquestion由于引入了STT_GNU_IFUNC符号。有没有办法阻止导出任何此类符号,以便我的二进制文件可以使用旧的ABI?我使用nm在我的二进制文件中查找任何“i”类型的符号,但没有找到。我问这个是因为我的其他一些二进制文件以及我构建的一些第3方库(tbb、boost)没有使用新的ABI,因此在RedHat机器上运行良好。希