Articles of gcc

ISO-10646 XFont编码问题

我正在尝试在我的X Window程序中使用ISO-10646固定字体。 它必须支持英文,俄文和希腊文字母,但它不支持。 在xfontsel窗口中一切正常,但在我的程序中只有英文显示正确。 使用类似g++ -fexec-charset=ISO-10646 …或g++ -finput-charset=ISO-10646 …没有帮助。 我该如何解决? testing应用窗口截图: xfontsel窗口截图: testing应用代码: #include <X11/StringDefs.h> #include <X11/Xaw/Command.h> int main(int argc, char **argv) { Widget widget = XtInitialize(argv[0], "simple", NULL, 0, &argc, argv); XtVaCreateManagedWidget( "English Русский ελληνικά", labelWidgetClass, widget, XtNfont, XLoadQueryFont(XtDisplay(widget), "-Misc-Fixed-Medium-R-Normal–20-200-75-75-C-100-ISO10646-1" ), XtNwidth, 500, XtNheight, 100, NULL ); XtRealizeWidget(widget); XtMainLoop(); }

RSP不指向栈顶?

我有一个问题,了解堆栈如何工作。 首先我的小代码: void func1 ( int z ) { int i = 1; } int main ( ) { func1 ( 89 ); return 0; } 我使用的是:Ubuntu 16.04 64位,gcc版本5.4.0,gdb版本7.11.1。 我正在用GDB进行debugging,看看编译器如何将函数参数压入堆栈。 当我在RSP指向的地方检查堆栈时,我得到: (gdb) x/10xw $rsp 0x7fffffffdf20: 0xffffdf30 0x00007fff 0x00400525 0x00000000 0x7fffffffdf30: 0x00400530 0x00000000 0xf7a2e830 0x00007fff 0x7fffffffdf40: 0x00000000 0x00000000 当我打印出最新创build的variables的地址时,我得到这个: (gdb) p &i $4 = (int *) […]

无法使用SSH在共享服务器(Linux)上安装psycopg2。 说错误:命令'gcc'失败,退出状态为1

我在一个知名的networking托pipe公司的共享服务器上,这里是我的Linux版本的细节。 我在这里添加所有的命令,以便解答提供者在应答之前拥有所有的信息。 $ uname -a Linux somehosting.com 2.6.32-673.8.1.lve1.4.3.el6.x86_64 #1 SMP Wed Feb 10 08:57:30 EST 2016 x86_64 x86_64 x86_64 GNU/Linux $ cat /proc/version Linux version 2.6.32-673.8.1.lve1.4.3.el6.x86_64 (mockbuild@build.cloudlinux.com) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC) ) #1 SMP Wed Feb 10 08:57:30 EST 2016 $ cat /etc/*release* CloudLinux Server release 6.8 (Oleg Makarov) CloudLinux Server […]

为什么strptime c函数改变结构?

函数strptime()不可理解的行为: #define _XOPEN_SOURCE #include <stdio.h> #include <time.h> double getPeriod(char * dateStart, char * dateStop) { struct tm tmStart, tmStop; time_t timeStampStart, timeStampStop; strptime(dateStart, "%Y-%m-%d %H:%M:%S", &tmStart); strptime(dateStop, "%Y-%m-%d %H:%M:%S", &tmStop); timeStampStart = mktime(&tmStart); timeStampStop = mktime(&tmStop); printf("%d\t%d\n", tmStart.tm_hour, tmStop.tm_hour); } int main() { getPeriod("2016-12-05 18:14:35", "2016-12-05 18:18:34"); return 0; } 输出: 17 18 为什么会发生? 编译器gcc(GCC)6.2.1 […]

编译GCC 4.8.4错误(CXX_ABI 1.3.8)

我正在尝试使用以下configuration参数来编译GCC版本4.8.4: –prefix=<path to gcc src> –enable-languages=c,c++ –build=x86_64-linux-gnu 但是,当我尝试make我得到以下错误: make[5]: Entering directory '/DIR/gcc/objdir/x86_64-linux gnu/libstdc++-v3/po' msgfmt -o de.mo ../../../../libstdc++-v3/po/de.po msgfmt -o fr.mo ../../../../libstdc++-v3/po/fr.po msgfmt: /DIR/gcc/objdir/x86_64-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6: version CXXABI_1.3.8 not found (required by /usr/lib/x86_64-linux-gnu/libicuuc.so.55) Makefile:460: recipe for target fr.mo failed make[5]: *** [fr.mo] Error 1 make[5]: *** Waiting for unfinished jobs…. msgfmt: /DIR/gcc/objdir/x86_64-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6: version CXXABI_1.3.8 not found (required by […]

从gcc中删除libgcc_s依赖项

我已经从源码安装gcc-7.1.0基于: https : //gcc.gnu.org/install/index.html使用新的gcc。 编译的二进制文件与libgcc有一个额外的依赖关系: $ ldd a.out linux-vdso.so.1 => (0x00007fffd85fd000) librt.so.1 => /lib64/librt.so.1 (0x000000365b400000) libdl.so.2 => /lib64/libdl.so.2 (0x000000365a800000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x000000301ae00000) libpthread.so.0 => /lib64/libpthread.so.0 (0x000000365b000000) libc.so.6 => /lib64/libc.so.6 (0x000000365a000000) /lib64/ld-linux-x86-64.so.2 (0x0000003659c00000) 我没有select任何特定的configuration选项(除了–prefix ),并安装了默认值。 看着config.log ,看来configuration决定默认情况下不能这样做。 相关部分: configure:5038: checking whether g++ accepts -static-libstdc++ -static-libgcc configure:5055: g++ -o conftest -g -O2 -static-libstdc++ -static-libgcc conftest.cpp >&5 […]

在make规则中使用时,如何让MAKEFILE在string中保留反斜杠序列?

这是我在Stackoverflow的第一个问题,所以请原谅我,如果我问任何可笑的:D。 问题: 假设我想编译一个在“my dir /”目录下的程序,里面有一个空格。 说程序的path是“我的dir / test.c”。 以下是我正在尝试的示例makefile: CC = gcc DIR = my\ dir $(DIR)/test.out: $(DIR)/test.c # $(CC) $< -o $@ $(CC) $(DIR)/test.c -o $(DIR)/test.out 正如你所看到的,在最后一行(第5行)中,我已经分别直接写入了源文件和输出文件的path名,分别写在前提条件和目标文件中。 这样做的工作正常,因为它产生的命令: gcc my \ dir / test.c -o my \ dir / test.out 这是一种将文件名(包含空格)传递给gcc或任何其他shell命令的语法正确的方法。 第二行(第四行)是问题所在(注释行)。 我已经使用自动variables$ @(目标)和$ <(第一个也是唯一的先决条件)产生gcc的文件名参数,我希望是 我的\ dir / test.out和我的\ dir / test.c ,分别。 但是在这里,出于某种原因,生成的文件名是我的dir […]

将“getter”函数replace为macros查找

问题 我试图通过大型平台抽象库(PAL)将多个基于硬件的产品移植到资源有限(即千字节计数 )的小型embedded式系统中。 目前的PAL有一个简单的getRegister()函数,它返回一个特定产品的寄存器地址。 例如,假设产品名为coconut和pineapple ,代码将如下所示: #include "headers/Include/coconut.h" #include "headers/Include/pineapple.h" enum prodType { PROD_COCONUT = 0, PROD_PINEAPPLE, PROD_MAX, PROD_INVALID = (-1) }; uint64_t getRegister(enum prodType prod, int regName) { uint64_t r = 0; switch (prodType) { case PROD_COCONUT: switch (regName) { case REG_BASE: r = COCONUT_REG_BASE; break; case REG_CORE: r= COCONUT_REG_CORE; break; } break; case […]

为什么回溯不包含Objective-C符号而不pipe-rdynamic?

更新:我正在使用Linux上的GNU运行时。 在Apple运行库的MacOS上不会发生此问题。 更新2:我编译了MacOS上的GNU运行时,并用它构build了这个例子。 GNU运行时在MacOS上不会发生该错误。 我会说问题是glibc(因为backtrace和backtrace_symbols是glibc扩展)。 当使用backtrace和backtrace_symbols在GCC编译的Objective-C应用程序中打印backtrace_symbols ,我没有得到任何Objective-C符号。 只有文件名,地址和C符号出现。 我用-g编译,并与-rdynamic 。 我的testing应用程序 void _printTrace() { void *addr[1024]; int aCount = backtrace(addr, 1024); char **frameStrings = backtrace_symbols(addr, aCount); for (int i = 0; i < aCount; i++) { printf("%s\n", frameStrings[i]); } free(frameStrings); } @interface TheObject + (void)_printTrace; + (void)printTrace; @end @implementation TheObject + (void)_printTrace { _printTrace(); } […]

在C程序中debugging慢函数(由gcc构build)

有这样的来源: void foo() { func1(); if(qqq) { func2(); }; func3(); func4(); for(…) { func5(); } } 我想获得这样的信息: void foo() { 5 ms; 2 times; func1(); 0 ms; 2 times; if(qqq) { 0 ms; 0 times; func2(); 0 ms; 2 times; }; 20 ms; 2 times; func3(); 5 s ; 2 times; func4(); 0 ms; 60 […]