Articles of c + +

在Linux上,为什么析构函数在C ++的全局variables的共享实例上运行两次?

在Linux上,我从一个定义了全局variables的静态库中生成了一些C ++代码。 这个全局variables的一个实例在引用它的符号的两个共享库之间共享。 当进程closures并且运行静态终止阶段时,我看到这个共享实例上的析构函数运行了两次! 据推测,每个图书馆每个卸载。 这个问题与我最近在这里看到的另一个问题密切相关: 相关的问题 。 这听起来像是一样的行为,但没有讨论为什么会发生。 有人知道背后的理论解释吗?

如何为QtWebKit安装一个插件

我正在运行一个Qt 4.5商业快照,并希望在我的QWebView使用我下载的一个插件(这是一个.so文件)。 有一个特定的位置,我需要放置这个文件? 我可以用QWebPluginFactory抓取它吗?

Linux下C ++audio捕获API的最佳实践?

我需要从麦克风function创build一个简单的录音C + +应用程序。 我不能说有没有足够的audioAPI来做到这一点! Pulse,ALSA,/ dev / dsp,OpenAL等。我的问题是目前的“最佳实践”API是什么? 脉冲似乎支持大多数现代发行,但似乎几乎没有文件。 OpenAL是否支持不同的发行版,还是太模糊了? 我错过了吗? 有没有一个简单的答案?

我怎样才能获得多个调用sem_open在C中工作?

在C语言的基础上,我正在经历很多困难。 我的申请过程是这样的: 申请开始 申请分入儿童/家长 每个进程使用具有通用名称的sem_open来打开信号量。 如果我在分叉之前创build信号量,它工作正常。 但是,要求阻止我这样做。 当我第二次尝试调用sem_open时,出现“Permission Denied”错误(通过errno )。 有没有可能以任何方式做到这一点? 还是有什么办法在一个进程中打开信号量,并使用共享内存机制与subprocess共享?

Qt的最好的方式来显示非常大的富文本?

我需要显示非常大的日志,使用HTML标记标记不同types的数据。 使用QTextEdit和QTextBrowser真的会减慢应用程序,特别是在追加操作。 我真的想保持QTextEdit界面和能力。 我见过一些实现了自己的TextEdit风格的人来提高性能,但是如果有人使用“Qt”工具解决了这个问题的话,我会徘徊不前。 我想过使用Model / View框架来根据需要加载数据,但这不像我想的那样。 也许inheritanceQTextEdit并覆盖一些插槽滚动… 如果有人遇到这个问题,并解决它,我将不胜感激一些提示。 谢谢。

安装旧版本的gcc

我想在我的Ubuntu 64位系统上安装gcc 4.1.2,目前这个系统有gcc 4.4。 我想继续使用当前的gcc,但也想添加gcc 4.1.2。 任何简单的方法来做到这一点,即在我的系统上安装gcc 4.1.2?

gdb如何获取线程名称显示

在我的应用程序中创build了很multithreading。 一些线程名在gdb中可见,而我执行命令'info threads',其他的则不显示。 如何获取所有的线程名称本身,而不是hex值,如0xb7fe1424 4 Thread 0xb68ffb70 (LWP 18377) 0xb7fe1424 in __kernel_vsyscall () * 3 Thread 0xb7291b70 (LWP 18375) JKMainT (arg=0x0) at mylib.cpp:482 2 Thread 0xb7a92b70 (LWP 18374) 0xb7fe1424 in __kernel_vsyscall () 1 Thread 0xb7a94730 (LWP 18371) 0xb7fe1424 in __kernel_vsyscall ()

调用execv()时dynamic分配内存会发生什么?

我正在编写一个简单的shell作为一个操作系统课程的任务,我需要在PATH中search,以find程序用户input,一旦我find正确的目录,我malloc一块内存只是足以容纳目录名加上程序名,我把它作为第一个parameter passing给execv()。 我可以静态分配100个左右的字符,但有一个限制让我感到不舒服。 所以当execv()执行时,堆是被清理还是丢失了那块内存? 这可能不是很多的记忆,但我只是好奇。

为什么我不能在gdb中打印出环境variables?

#include <unistd.h> #include <stdio.h> extern char **environ; int main(int argc, char *argv[]) { int i = 0; while(environ[i]) { printf("%s\n", environ[i++]); } return 0; } 这是我的操作: (gdb) n 8 printf("%s\n", environ[i++]); (gdb) p environ[i] Cannot access memory at address 0x0 (gdb) n LOGNAME=root 7 while(environ[i]) { 正如你所看到的, printf可以打印出environ[i] ,但是p environ[i]给我Cannot access memory at address 0x0 […]

相当于inet_aton的窗口

我正在将一些为linux系统编写的代码转换成Windows系统。 我为我的Windows系统使用C ++,想知道函数inet_aton的等价物。