草庐IT

linux - gcc 编译的二进制文件给出 "cannot execute binary file"

我编译这个程序:#includeintmain(){printf("HelloWorld!");return0;}使用这个命令:gcc-c"hello.c"-ohello当我尝试执行hello时,我得到了bash:./hello:Permissiondenied因为权限是-rw-r--r--1nathannathan8562010-09-1723:49hello出于某种原因??但是无论如何......在更改权限并尝试再次执行之后,我得到了bash:./hello:cannotexecutebinaryfile我正在使用gcc(Ubuntu4.4.3-4ubuntu5)4.4.3我在这里

linux - 试图理解 gcc 在复制返回地址的 main 顶部的复杂堆栈对齐

你好我已经反汇编了一些我写的程序(linux)以更好地理解它是如何工作的,我注意到主要功能总是以:leaecx,[esp+0x4];Iassumethisisforgettingtheadressofthefirstargumentofthemain...why?andesp,0xfffffff0;???isthecompilertryingtoalignthestackpointeron16bytes???pushDWORDPTR[ecx-0x4];Iunderstandtheassemblerispushingthereturnadress....why?pushebpmovebp

c - 为什么 linux 内核使用非标准 C 编码(gcc 特定功能)?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter寻求指导。关闭11年前。Linux内核代码使用“statement-expression”和typeof扩展,使其只能在gcc下编译。越想越觉得没有意义。它违背了可移植性和标准C的目的。(现在linux内核代码需要一个支持gcc扩展的特定编译器)。这是一个糟糕的设计选择还是有特定的原因让linux内核代码特定于gcc?编辑:当我说它破坏了可移植性时,我在不同的上下文中使用了

linux - 是否可以用 gcc 以外的东西编译 Linux 内核

我想知道是否有人设法用gcc以外的其他编译器编译Linux内核。或者如果有人曾经尝试过?问题可能看起来很愚蠢或很学术,但当我想到以下问题的答案时出现了:AreC++intoperationsatomiconthemipsarchitecture似乎有些操作的原子性不仅取决于cpu架构,还取决于使用的编译器。所以,我想知道在Linux世界中是否存在gcc以外的编译器。 最佳答案 Linux显式依赖于某些gccextensions,因此在这种情况下,任何其他编译器都必须与所需的扩展兼容。这不是“不”,因为对于单独的编译器供应商/开发人员

linux - gcc 是否有任何选项可以在 ELF 二进制文件中添加版本信息?

我的意思是gcc是否可以将一些源代码版本信息插入ELF二进制文件作为部分或类似的东西。我不想更改我的源文件,而是在Makefile中使用gcc选项添加一些信息。 最佳答案 如果您不介意只更改一次源文件,请添加如下内容:constvolatilestaticcharversion[]=VERSION;并编译:gcc-c-DVERSION='"1.2.3"'volatile防止gcc在更高的优化级别上删除字符串。正如所写,如果您忘记了-D选项,这将无法编译,这可能是好是坏,具体取决于您的要求。

linux - 找不到 gcc-arm-linux-gnueabi 命令

我正在尝试为ubuntu安装gnuarm工具链。我首先从CodeSourcery下载了tar。但是,当我进入bin文件夹时,我无法运行任何二进制文件。我尝试过使用./和不使用它并将其放入PATH中,它一直告诉我“未找到命令”,但该文件就在我面前的文件夹中。然后我尝试了sudoapt-getinstallgcc-arm-linux-gnueabi除非它说它已经安装成功,我找不到它whereisgcc-arm-linux-gnueabi。谁能帮忙? 最佳答案 固定,使用:sudoapt-getinstallgcc-arm*

c - 我怎样才能用gcc编译成汇编

如何使用gcc编译成程序集而不是可执行文件。我知道有一个-S标志,但我在makefile中的什么地方使用它。例如,如果我使用标志-O3-oexe_name,我应该将-S标志放在哪里? 最佳答案 我还建议使用-fverbose-asm,因为这样生成的汇编程序会生成一些注释,“解释”代码。例如:gcc-S-fverbose-asm-O2foo.c将在foo.s中生成(带有一些注释)通过编译foo.c生成的汇编代码要了解GCC优化的作用,甚至可以尝试-fdump-tree-all(但这会产生数百文件!)。

c - fork() 在 linux gcc 中的工作

这个问题在这里已经有了答案:printfanomalyafter"fork()"(3个答案)关闭8年前。fork()createsanewprocessandthechildprocessstartstoexecutefromthecurrentstateoftheparentprocess.这是我对Linux中的fork()的了解。因此,相应的代码如下:intmain(){printf("Hi");fork();return0;}按照上述只需要打印一次“Hi”。但是在使用gcc编译的Linux中执行上面的代码时,它会打印“Hi”两次。有人可以向我解释一下使用fork()时实际发生了什

linux - 摆脱 "gcc -/usr/bin/ld: warning lib not found"

我在链接期间有以下警告:/usr/bin/ld:warning:libxxx.so.6,neededby/a/b/c/libyyy.so,notfound(tryusing-rpathor-rpath-link)设置环境变量LD_LIBRARY_PATH=path_to_libxxx.so.6使警告静音(添加-Lpath_to_libxxx.so.6没有帮助)。我有一个单独的编译服务器,生成的二进制文件只在其中编译。二进制文件在其他服务器上执行,二进制文件可以看到libxxx.so.6(使用lddexecutable检查)。有没有其他方法可以消除编译时的警告(我有好几次了,很烦人)?

mysql - 错误 : command 'x86_64-linux-gnu-gcc' when installing mysqlclient

我在virtualenv中安装了django1.8.5并使用python3.4.3使用sqlite时,worked显示itworks页面我想使用mysql,我正在尝试使用以下命令安装mysqlclientpipinstallmysqlclient我收到以下消息----------------------------------------FailedbuildingwheelformysqlclientFailedtobuildmysqlclientInstallingcollectedpackages:mysqlclientRunningsetup.pyinstallformysql