草庐IT

linux - 绕行和 GCC 内联汇编 (Linux)

我正在为一个为(我们)模组提供API的游戏编写扩展程序。这个API提供了各种各样的东西,但它有一个限制。API仅适用于“引擎”,这意味着基于引擎发布的所有修改(mod)不提供/具有任何类型的(特定于模块的)API。我创建了一个“签名扫描器”(注意:我的插件作为共享库加载,使用-share和-fPIC编译)它可以找到感兴趣的功能(因为我在linux上很容易)。所以来解释一下,我举一个具体的例子:我找到了一个感兴趣的函数的地址,它的函数头很简单int*InstallRules(void);.它需要一个空(void)并返回一个整数指针(指向我感兴趣的对象)。现在,我想要做的是为我自己的函数创

c++ - 构建 gcc-4.8.2 时如何理解这些可怕的错误?

我正在尝试在远程Debian7系统上安装gcc-4.8.2编译器,我没有root权限,但只有ssh访问权限。我发现最简单的方法是从源代码编译编译器。我正在关注thisshortinstallationmanual来自GCC网页。基本上我做了最简单的安装,总结在页面底部:tarxzfgcc-4.8.2.tar.gzcdgcc-4.8.2./contrib/download_prerequisitescd..mkdirobjdircdobjdir$PWD/../gcc-4.8.2/configure--prefix=$HOME/gcc-4.8.2--enable-languages=c++

c - 在 gcc 中禁用可变长度自动数组

即使使用-std=c89标志,我也无法禁用它。我怎样才能禁用它? 最佳答案 您可以使用编译器标志为可变长度数组生成错误:-Werror=vla 关于c-在gcc中禁用可变长度自动数组,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/31710642/

c++ - 如何知道用于构建 linux 的 gcc 版本?

我使用OpenWRT。它是嵌入式系统的Linux发行版我想知道编译linux的gcc版本我在网上做了一些研究,但没有结果。我尝试对linuxOpenWRT中的一些现有二进制文件(如wget)执行这些命令strings-a|grep"GCC"strings-a|grep"gcc"但是我没有得到任何结果甚至strings-a/lib/libgcc_s.so.1|grep"gcc"strings-a/lib/libuClibc-0.9.30.1.so|grep"gcc"没有给出任何结果有没有办法知道使用gcc构建整个linux(对于用户空间和内核空间)? 最佳答案

linux - GCC 编译因 pthread 和选项 std=c99 而失败

我有一个无法使用-std=c99编译的示例程序感谢任何帮助#includeintmain(void){pthread_rwlock_tmyLock;return0;}outputofthetwocompiles:gccpthread_test.c[brad@fedora17onbradsmacprosrc]$gccpthread_test.c[brad@fedora17onbradsmacprosrc]$gcc-std=c99pthread_test.c[brad@fedora17onbradsmacprosrc]$gcc-std=c99pthread_test.cpthread_te

c - gcc - 在 bss 中编写和执行代码 - 设置权限标志

我在linux系统(确切地说是centos5.4)上的C程序中在运行时生成x86-64代码。我将字节码生成到全局数组中,如下所示charprogram[1024*1024]__attribute__((aligned(16)));然后通过函数指针调用它。我的问题是,当我这样编译程序时gcc-std=gnu99parse.c-oparse-lm我得到一个SIGSEGV,我推测这是由于bss部分未设置为可执行文件,如pmap所示00000000006010004Krw---/data/work/tmp/parse00000000006020001024Krw---[anon]当我这样编译时

c++ - GCC 规范文件 : how to get the installation path

我没有将-Wl,-rpath=$HOME/local/gcc52/lib64用于我从源代码构建的GCC5.2的每次调用,而是修改了它的spec以这种方式归档:*link_command:%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:%(linker)-rpath=%:getenv(HOME/local/gcc52/lib64)...但这取决于我在$HOME/local/gcc52下的具体安装。有没有更好的方法来引用调用的GCC本身的安装路径?这个手册页对我帮助不大:https://gcc.gnu.org/onlinedocs/gcc/Spec-Fi

c++ - 如何在 Linux (Ubuntu) 上安装 GCC 5.1

我想在Ubuntu上试用新的GCC5.1C++编译器。如何在Ubuntu上安装GCC5.1?我更喜欢某种形式的预构建可执行文件,我可以下载并安装它,而不是下载GCC的源代码并从中构建整个GCC5.1。此外,自从我读到libstdc++的ABI在GCC5中发生了变化,新版本的libstdc++是否也必须与GCC5.1一起安装? 最佳答案 包g++-5(gcc版本5.2.1)在debian测试或ubuntuwily中可用。之前的里程碑是4.9和4.8。获得介于两者之间的版本会更加困难,例如5.1。如果对5.2.1仍然满意,则将此行添加到

linux - 如何在 Linux 中使用旧版本的 gcc

在Linux中,我试图编译一些使用-fwritable-strings选项的东西。显然这是一个gcc选项,在较新版本的gcc中不起作用。我在我的系统上安装了gcc-3.4,但我认为较新的版本仍在使用,因为我仍然收到无法识别命令行选项-fwritable-strings的错误。我怎样才能让make使用旧版本的gcc? 最佳答案 您对正在使用的构建系统只字未提,但通常可以通过类似的方式显式调用旧版本的gcc(这是针对基于自动工具的构建):./configureCXX=g++-3.4CC=gcc-3.4对于基于make的构建系统,有时这会

linux - 为什么 gcc 在调用 “halt” 之后在程序中放置 “main” 指令?

在Linux/i386系统上查看由gcc生成的elf可执行文件时,它似乎总是在调用“main”之后和“nop”填充之前放置一个暂停指令(0xf4),例如:│.......!entrypoint:│.......!xorebp,ebp│80482e2!popesi│80482e3!movecx,esp*emphasizedtext*│80482e5!andesp,0fffffff0h│80482e8!pusheax│80482e9!pushesp│80482ea!pushedx│80482eb!push__libc_csu_fini│80482f0!push__libc_csu_init