Articles of g ++

链接到静态库后未定义的引用

我写了一个简单的程序来testingxdotool是否能满足我的要求。 (呃,不是真的,我的第一步是确定是否可以调用xdotool库。) #include <xdo.h> #include <iostream> using namespace std; int main(){ cout << xdo_version() << endl; xdo_new(NULL); return 0; } 但是,当我编译这与g++ -oa main.cpp libxdo.a -lXtst -lX11 -lXinerama -I ../test/xdotool-2.20110530.1 ,我得到以下错误信息: /tmp/ccW95RQx.o: In function `main': main.cpp:(.text+0x5): undefined reference to `xdo_version()' main.cpp:(.text+0x29): undefined reference to `xdo_new(char*)' collect2: error: ld returned 1 exit status make: *** [sendkey] Error […]

为什么gcc不支持裸函数?

我使用裸函数来修补正在运行的程序的一部分。 我可以很容易地在Windows中使用VC ++来做到这一点。 我试图在Linux中这样做,似乎gcc不支持裸function。 用裸函数编译代码给了我这个:warning:'naked'attribute directive ignored。 在CentOS 5.5 i386下编译。

这是GCC错误?

当编译我的项目大量混合C和C++ ,我得到这个错误(编译C ++文件时): /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h: In function 'int std::__convert_from_v(__locale_struct* const&, char*, int, const char*, …)': /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:70:3: sorry, unimplemented: function 'int std::__convert_from_v(__locale_struct* const&, char*, int, const char*, …)' can never be inlined because it uses variable argument lists 编译结束。 但是,当我手动编辑文件/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h并删除__convert_from_v之前的inline修饰符它工作。 导致问题的函数头原本是inline : inline int __convert_from_v(const __c_locale& __cloc __attribute__ ((__unused__)), char* __out, const int __size __attribute__ ((__unused__)), const […]

在C ++中,当我在-128,127范围之外的整数值上使用static_cast <char>时会发生什么?

在使用g ++的i386 Linux上编译的代码中,我使用了static_cast<char>()强制转换为可能超出-128,127 char的有效范围的值。 没有错误或exception,所以我使用了生产中的代码。 现在的问题是,我不知道这个代码可能会在这个范围之外的值被抛出时如何performance。 如果数据被修改或截断没有问题,我只需要知道这个修改是如何在这个特定的平台上运行的。 另外如果使用C风格的演员( (char)value )会发生什么? 它会有不同的performance吗?

是什么让g ++包含GLIBCXX_3.4.9?

我使用g ++版本4.2.3在同一个GNU / Linux服务器上编译了两个不同的二进制文件。 第一个使用: GLIBC_2.0 GLIBC_2.2 GLIBC_2.1 GLIBCXX_3.4 GLIBC_2.1.3 第二个使用: GLIBC_2.0 GLIBC_2.2 GLIBC_2.1 GLIBCXX_3.4.9 GLIBCXX_3.4 GLIBC_2.1.3 为什么第二个二进制文件使用GLIBCXX_3.4.9,它只能在libstdc ++。so.6.0.9中使用,而不能在libstdc ++。so.6.0.8中使用 g ++生成的新function需要ABI中断并强制系统具有GLIBCXX_3.4.9? 有没有办法禁用这个新function不需要GLIBCXX_3.4.9?

工作程序在“清洁机器”上获得非法指令错误?

我有一个在我的开发机器上正常工作的程序,但是在只有必要的文件被复制的“干净的机器”上testing时会产生一个非法的指令错误。 该程序由我的共享库(由C ++源代码构build而成)以及一个演示库用法的C封装示例程序组成。 在开发机器上,所有的都是用Eclipse w / g ++编译的,Debug和Release都能正常工作。 一些标准的图书馆被链接在。 为了testing我可能错过的依赖关系,我将.c文件,库的.so文件和库.h文件复制到新的Linux安装目录,并使用与Eclipse相同的发行版编译选项创build的简单脚本进行编译/链接正在使用。 两台机器都有g ++ 4.3.2。 当我在清洁机器上运行程序时,打印“非法指令”后立即退出。 在gdb中运行会产生: (gdb) run Starting program: /home/sfallows/Source/Apps/MySample/MySample [Thread debugging using libthread_db enabled] [New Thread 0xb5c4ca90 (LWP 7063)] Program received signal SIGILL, Illegal instruction. [Switching to Thread 0xb5c4ca90 (LWP 7063)] 0xb7f0cb29 in __static_initialization_and_destruction_0 (__initialize_p=1, __priority=65535) at /usr/include/c++/4.3/iostream:77 77 static ios_base::Init __ioinit; Current language: […]

如何在CentOS 6中安装或升级g ++?

我有CentOS 6,并安装了yum install devtoolset-2 g ++ 4.4.7 不过,我想安装g ++ 4.8或更高版本。 我怎样才能做到这一点?

在Ubuntu上编译CentOS

我可以在最新版本的Ubuntu(附带4.4.3)上安装旧版本的gcc / g ++(4.1.3),并使用它来编译应该在CentOS上运行的.so。 由于缺less导入(GLIB_2_11,…),使用Ubuntu版本的gcc编译的二进制文件无法在CentOS上加载。 我需要C ++(包括exception),所以我不能静态链接到我已经尝试过的glibc。 我可以安装旧版本的gcc而不删除新版本吗? 我该如何去解决旧的gcc所需的库? 我目前正在CentOS中开发代码,但使用起来实在太痛苦了。 我真的想转移到Ubuntu桌面。

有没有使用DLL函数perf命中?

正如标题所说,与一个正常的函数相比,在调用dll函数时是否有一个perf的命中? 该DLL将由dlopen加载。 编辑:忽略dlsym时间,因为我只做每个函数一次。

不同stream程之间的收益

我有两个C ++代码,一个叫a ,一个叫b 。 我使用Boost线程库运行在64位Linux上。 一个代码创build5个线程停留在一个无止境的循环做一些操作。 b代码创build了5个线程,并保留在调用yield()的非结束循环中。 我在一个quadcore机器上…当单独调用一个代码时,它几乎占用CPU的400%。 当单独调用b代码时,它几乎占用CPU的400%。 我已经预料到了。 但是,当运行在一起,我期待的B代码使用几乎没有任何的CPU和使用400%。 但实际上两者都使用CPU的等分片,差不多是200%。 我的问题是,不收益()之间的作品不同的过程? 有没有办法让它按照我预期的方式工作?