Articles of gcc

在/ usr / local / lib中找不到gcc:链接库,但是/etc/ld/so.conf.d/libc.conf列出了它?

我遇到了共享库和gcc的问题。 起初我无法运行我编译的程序,因为我得到以下错误:加载共享库时的gcc错误。 我做了一些search,发现这是因为无法find共享库。 不过,我已经确定共享库位于/ usr / local / lib,其中AFAICT是共享库的一个常用目录,应该从头开始。 我读过,你可以设置LD_LIBRARY_PATH,这对我工作。 但是,我不希望每次我想运行我的程序设置。 进一步searchbuild议编辑ld.so.conf。 当我看到它时,有以下几点: include /etc/ld.so.conf.d/*.conf 查看ld.so.conf.d目录显示了一系列文件,包括libc.conf。 在这个文件里面是: /usr/local/lib 所以我的问题是,为什么我需要手动设置LD_LIBRARY_PATH当ld.so.conf似乎使用包含/ usr / local / lib的libc.conf? 有什么我在这里丢失,必须先configuration? 编译时有没有选项,我错过了? 我应该注意到,为了编译,我必须指定图书馆的path,我不知道这是否是我的问题或正常行为的症状。 我还应该注意到,当我在其他系统上部署我的软件时,这是我所关心的问题。 我会认为我应该能够把.so放在合适的地方,并且不用搞乱ld.so.conf就可以安装我的程序。 我希望这是这个问题的适当的论坛,我阅读了常见问题,我认为没关系。 干杯。

可以-std = c99防止我的#包含工作正常吗?

我想在Linux系统上编译一个C程序。 我有一个stdlib.h的#include语句。 当我用gcc编译程序时,如下所示: gcc -std=c99 -g -o progfoo progfoo.c progbar.c 我收到有关Implicit declaration of function [srand48, drand48, bzero, or close]警告。 编译为: gcc -g -o progfoo progfoo.c progbar.c 没有给我警告,但它确实对我使用for循环(这是首先添加-std=c99的理由)大喊大叫。 鉴于这个man srand48提到包括我所拥有的<stdlib.h> ,我不确定还有什么问题可以解决。 for循环对于任何事情来说都不是必须的(它们只是为了节省初始化数组的时间),所以我没有问题去除它们,但是在我做之前我想确认c99标准是否取代了我的#include陈述。 我正在使用gcc 4.1.2-50 (Red Hat) 。

获取不能分配内存错误

我在我的程序中得到这个错误… mprotect: Cannot allocate memory ulimit -a给出输出: core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 20 file size (blocks, -f) unlimited pending signals (-i) 16382 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX […]

G ++总是失败,对_Unwind_GetIPInfo未定义的引用

我刚刚升级到我的华硕EeePC上网本的Ubuntu 11.04,并与G ++有问题。 使用G ++编译任何程序,无论是使用iostream,cstdio还是stdio.h,即使是一个简单的“Hello World”,也会失败,并显示以下消息: /usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5.2/libstdc++.so: undefined reference to `_Unwind_GetIPInfo@GCC_4.2.0' collect2: ld returned 1 exit status 我使用新立得包pipe理器。 在升级之前,Ubuntu提供了GCC 4.4,不过我也通过另一个仓库安装了GCC 4.5(gcc-4.5)。 GCC 4.5现在是Ubuntu 11.04的默认设置。 我认为这个问题可能与libgcc有关。 我尝试重新安装GCC,但是我无法删除libgcc:首先,新立得软件包pipe理器报告说在某处存在破损的软件包,并停止了我的尝试; 但我也注意到,删除libgcc将需要删除几乎所有的应用程序,包括apt和Firefox。 我也尝试了gcc-snapshot包; 不幸的是,它给出了上面列出的相同的错误。 有什么办法可以使用新立得软件包pipe理器来获取G ++的最新工作版本?

静态和内联

我在C编程。我想要一些关于静态和内联函数的描述。 我知道,如果我们把一个函数做成静态的,那么它就是编译器的一个指示,即它只在一个翻译单元的内部链接下。 我有以下关于静态和内联的疑问: 如果我们做一个静态的函数,我们可以在其他的翻译单元中使用它…即在其他.c文件中? 如果是的话,如何? 如果我们将函数作为静态内联,那么有什么区别? 编译器如何处理它? 是否将函数作为静态函数产生与macros相同的效果? 将函数视为内联取决于编译器的大小。 那么有什么办法可以强制让它像内联一样被对待? 我们如何使用内联和静态函数进行优化? 请在上面的内容中阐明一些内容。 平台是Linux,gcc编译器,C语言。

GCC 4.8和4.7会在同一台机器上和平共处吗?

安装gcc 4.7和4.8会在同一台机器上和平共存吗? 这将最初是Ubuntu 12.10(Quantal Quetzal)的机器,但可能会延长到其他机器和发行版,可能甚至我的Mac(这将是4.8和山狮最后提供的苹果gcc)。 我试图testing海湾合作委员会的改进诊断4.8比较他们叮当,因此我需要海湾合作委员会4.8。 如果上面的答案是肯定的,你如何调用gcc的每个安装?

如何在Linux上安装自定义gcc的boost?

我的gcc编译器位于自定义位置/ my / path / hpgcc 我已经下载了boost源码。 执行bootstrap.sh,但因为它使用默认的gcc运行,所以失败。 看着它,我发现它在第一件事情上失败了:构buildBoost.Build引擎: gcc -o bootstrap/jam0 command.c compile.c debug.c expand.c glob.c hash.c hdrmacro.c headers.c jam.c jambase.c jamgram.c lists.c make.c make1.c newstr.c option.c output.c parse.c pathunix.c pathvms.c regexp.c rules.c scan.c search.c subst.c timestamp.c variable.c modules.c strings.c filesys.c builtins.c pwd.c class.c native.c md5.c w32_getreg.c modules/set.c modules/path.c modules/regex.c modules/property-set.c modules/sequence.c modules/order.c execunix.c […]

返回到libc在gdb中工作,但不是在单独运行时

我正在尝试使用以下简单代码返回到libc技巧: #define SYSTEM_CALL_ADDR 0xb7ec5e50 /*my system call addr*/ #define EXIT_CALL_ADDR 0xb7ebbb80 /*my exit call addr*/ char shell[] = "/bin/sh"; int main(){ int* p; p = (int*)&p + 2; *p = SYSTEM_CALL_ADDR; p = (int*)&p + 3; *p = EXIT_CALL_ADDR; p = (int*)&p + 4; *p = shell; return 1; } 有趣的是,当我运行这个程序时,它以“分段错误”结束,但如果我使用gdb进行debugging并逐步运行,那就完全正常了,产生一个shell然后退出程序。 有人遇到这种情况? 或者有人请指导我如何纠正这一点? 首先感谢。 我在ArchLinux内核上:2.6.33,gcc […]

编译和链接Debian 64位上的32位应用程序

我目前正在试图编译和链接我的Debian 64位上的32位应用程序,但在链接时失败。 我正在使用(在我的Makefile中)编译的命令是: gcc -Os -m32 -Wall -g -c $< -o $@ 这似乎工作。 然后我用下面的命令链接: gcc -m32 -lcurses $^ -o $@ 这会失败,并提供以下错误: /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libcurses.so when searching for -lcurses /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libcurses.a when searching for -lcurses /usr/bin/ld: skipping incompatible /usr/lib/libcurses.so when searching for -lcurses /usr/bin/ld: skipping incompatible /usr/lib/libcurses.a when searching for -lcurses /usr/bin/ld: cannot […]

如何使libusb库对另一个程序可见?

我正在编译hidapi库。 为了编译,我需要libusb-1.0 。 我已经下载,configuration,制作并安装到/usr/local/lib 。 但是当我尝试编译hidapi ,并没有看到libusb-1.0 : cc -Wall -g -c -I ../ hidapi pkg-config libusb-1.0 –cflags hid-libusb.c -o hid-libusb.o -L / usr / local / lib在libusb-1.0中找不到包pkg-configsearchpath。 也许你应该将包含`libusb-1.0.pc'的目录添加到PKG_CONFIG_PATH环境variables中。找不到包'libusb-1.0'/ bin / sh:cc:not found make: * [hid-libusb.o]错误127 我该如何解决这个问题? (编译发生在Synology NAS上)