Articles of c + +

-finstrument-functions不适用于dynamic加载的g ++共享对象(.so)

我正在用Ubuntu上的g ++共享对象(.so)文件testing-finstrument函数。 我发现了一个奇怪的行为,即只有库是静态链接的,函数似乎才起作用。 如果我用dlopen / dlsym等链接到库,代码的function仍然有效,但它不会调用__cyg_profile *函数。 这里有一些代码来快速重现问题: MyLib.h #ifndef __MYLIB_H__ #define __MYLIB_H__ class MyLib { public: void sayHello(); }; #endif MyLib.cpp #include "MyLib.h" #include <iostream> using namespace std; void MyLib::sayHello() { cout<<"Hello"<<endl; } MyLibStub.cpp(到.so的C接口) #include "MyLib.h" extern "C" void LoadMyLib () { MyLib().sayHello(); } Trace.cpp #include <stdio.h> #ifdef __cplusplus extern "C" { void __cyg_profile_func_enter(void […]

非阻塞networking地址parsing(gethostbyname或getaddrinfo)?

使用经典的nsswitch.confconfiguration: hosts: files dns 尝试使用gethostbyname (或getaddrinfo )parsing名称可能需要一段时间,如果DNS不应答(或configuration不当)。 有没有办法在nsswitch.conf中configuration超时,或使用替代API来pipe理超时?

为什么使用setenv()后环境variables未被设置

我在Linux中编写了一个C程序来使用setenv设置环境variables的值,但是在执行后,当我运行set或export ,环境variables本身似乎是未设置的。 为什么? 这里是代码片段: int main() { char *mallocPtr, *callocPtr, *reallocPtr, *memalignPtr, *vallocPtr; struct sigaction sa; sa.sa_handler=SIGSEGV_handler; sigaction(SIGSEGV, &sa, NULL); if(setenv("ENV1", "3", 1) == 0) printf("ENV1 set to 3\n"); else fprintf(stderr, "setenv failed on ENV1");

g ++ 4.1.2没有在此范围内声明runtime_error

相同的代码在gcc 4.5.2上正常工作,但是当试图在gcc 4.1.2上编译时,我得到错误'runtime_error' was not declared in this scope 。 我有 #include <stdexcept> 这是gcc 4.1.2的问题吗? 代码摘录 // Constructor if (resource cannot be acquired) throw std::runtime_error("Blah Blah");

在Mac上编译C ++程序以在Linux上运行

可能重复: 如何交叉编译从Mac OS X到Linux x86? 我有一个应用程序,我用C ++ / SDL编写,使用FMOD库。 该应用程序是可移植的,编译没有任何代码在Mac和Linux上的变化。 但是有一个令人烦恼的是,当我想发布Linux版本时,我必须运行我的Linux机器,在那里复制源代码(通过USB驱动器,因为我没有networking,这是一个旧的笔记本电脑)并编译它,然后复制它再次通过USB到我的Mac并上传。 我的问题是 – 有没有更好的方法呢? 理想情况下,我可以编译应用程序直接从Xcode在Linux上运行,我为Mac编译它?

如何在C / C ++中以编程方式读取Linux文件权限

我怎样才能以编程方式读取linux文件权限,而不是使用“ls”然后parsing结果。

Xerces C ++ – 加载,读取和保存替代品?

我正在寻找一个教程来加载一个XML文件,阅读它,改变它,最后用C ++保存。 我正在使用Linux Ubuntu并尝试使用Xerces。 用Google和很多时间,我只能加载一个XML文件: #include <xercesc/parsers/XercesDOMParser.hpp> #include <xercesc/dom/DOM.hpp> #include <xercesc/sax/HandlerBase.hpp> #include <xercesc/util/XMLString.hpp> #include <xercesc/util/PlatformUtils.hpp> #include <iostream> using namespace std; using namespace xercesc; int main (int argc, char* args[]) { try { XMLPlatformUtils::Initialize(); } catch (const XMLException& toCatch) { char* message = XMLString::transcode(toCatch.getMessage()); cout << "Error during initialization! :\n" << message << "\n"; XMLString::release(&message); return […]

如何更新命令行输出?

在Linux中,虽然stdout到命令行,我想更新特定区域,如apt-get输出: 54% [Waiting for headers] [Waiting for headers] 211 kB/s 3s 百分比 , kB /秒和秒将更新每秒。 如果我们使用printf那么我们会得到多行输出。 我试过下面的printf : printf("\e[1;1H\e[2J"); 但它清除所有的输出。 我的问题是如何更新特定区域并保持其他人稳定?

我怎样才能减less最小的Linux进程的内存占用量

考虑下面的C程序,'pause.c': void main() { pause(); } 使用这个命令“gcc -Os pause.c -o pause”在x64 Linux 3.0.0-16-generic上编译这个文件会产生大小为〜8KB的可执行文件。 当我运行这个可执行文件并使用“pmap -d PID”检查其精确的内存占用情况时,它告诉我分配给进程的私有内存是192KB(通常在128KB到192KB之间,在不同的系统上有所不同)。 使用valgrind和massif检查进程未能检测到任何内存分配事件。 我对192KB的数字是否准确持怀疑态度,但是我发现,启动“暂停”进程的5个实例消耗了大约1MB的系统内存。 我无法解释这个记忆的起源,任何人都可以提供一些关于这个记忆被分配的原因以及任何可能减less它的潜在行为,欢呼声。

向量<struct>上的segfault

我创build了一个结构来保存一些数据,然后声明一个向量来保存该结构。 但是当我做一个push_back我得到该死的段错误,我不知道为什么! 我的结构被定义为: typedef struct Group { int codigo; string name; int deleted; int printers; int subpage; /*included this when it started segfaulting*/ Group(){ name.reserve(MAX_PRODUCT_LONG_NAME); } ~Group(){ name.clear(); } Group(const Group &b) { codigo = b.codigo; name = b.name; deleted = b.deleted; printers = b.printers; subpage = b.subpage; } /*end of new stuff*/ }; 最初,该结构没有复制,构造函数或析构函数。 […]