Articles of c + +

当mysql_stmt_close时出现Segfault错误

我想使用C API查询MySQL 5.5。 dbutil.c包含样板代码: #include "../include/dbutil.h" #include "../include/logging.h" #include "../include/common.h" MYSQL get_connection(char *host, char *user, char *passwd, char *db) { MYSQL conn; mysql_init(&conn); if (!mysql_real_connect(&conn, host, user, passwd, db, 0, NULL, 0)) { log_to_console("Cannot connect to MySQL server: %s", mysql_error(&conn)); exit(1); } return conn; } MYSQL_STMT prepare_stmt(MYSQL *conn, char *sql) { MYSQL_STMT *stmtP = mysql_stmt_init(conn); […]

为什么我的程序试图使用libluajit-5.1.so.2而不是libluajit.so?

我有一个使用LuaJIT的项目。 我试图在一台计算机上运行我的项目,我还没有在一段时间内运行它。 它曾经运行得很好,但现在当我尝试运行它抱怨。 我在我的源代码树中有LuaJIT,而且构build得很好。 我正在使用CMake生成我的make文件,并且据我所知,CMakefind文件libluajit.so,但是当我运行我的程序时,出现以下错误: ../build/game/game: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory 我不知道为什么它正在寻找该库的版本,而不是libluajit.so。 这是Ubuntu Linux的价值。 我可以添加更多的细节,如果有必要,我可以添加更多的细节,如果有必要,我不知道什么信息将有助于弄清楚发生。 编辑: 要build立和链接程序,我将这些行放在文件CMakeLists.txt (这只是简单地显示相关位) find_package(LuaJIT REQUIRED) set(Extern_LIBS luajit) add_executable(proj ${proj_Sources}) target_link_libraries(proj ${Extern_LIBS}) 在我的源代码目录上运行cmake后,运行make 。 然后运行它,我只是运行./proj

有什么办法可以不先读取几个字节的磁盘扇区?

我一直在尝试在Linux上读写文件的性能,尤其是O_DIRECT,我想知道,在硬盘级别和posix / Linux API级别,是否可以只写几个字节到而不会破坏其他部门,而不会先阅读它?

创buildgnome-shell applets / widget?

我正在寻找创build一个简单的工具,它将集成到gnome–shell。 我想把这个工具集成到“右上angular的控制栏”中: 我想要在右上angular有一个条目,我需要自定义“popup”(在图片中,寻找栏的地方)。 我的问题是: 那些叫什么? 小程序? 小工具? 这个酒吧叫什么? 短跑? docker? 我如何自己创build一个完全使用C / C ++? 我阅读了“GnomeShellExtensions” (包括一些第三方文章)的资源,我也发现了这个“迁移到 DBus ”的指南。 看看后面的那个,看起来你需要用JavaScript创builddock-entry,你可以用本地语言来完成剩下的工作,这在我看来很奇怪。 所以,我正在寻找一种完全在C / C ++中的方法。 我认为它应该是可能的,因为NetworkManager(在Dock / Bar的右侧)也没有它,也没有gnome-shell扩展(至less我找不到)。

析构函数称为窗体不适当的库

代码如下: foo.h中 extern "C" { int sdq_init_connector(const SSchar* path); } foo.cxx int sdq_init_connector(const SSchar* path) { Logger log(LOG_DEBUG, "sdq_init_connector"); /* here goes some not so relevant code */ log.write("Here be dragons"); return 0; } 还有Logger类,在foo中使用,没有什么有趣的,构造函数(char *消息),析构函数()和写(char *消息)。 问题总结: 当我从testing设备调用libfoo.so时,它完美地工作,但是在函数sdq_init_connector返回之后从生产系统调用它时SEGFAULTs backtrace在下面 #10 <signal handler called> #11 0x583d7fee in Node::~Node() () from /opt/siebel/sba81/siebsrvr/mw/lib/libtl.so #12 0x583de09a in Logger::~Logger() […]

关于这种情况下消息队列与共享内存的适用性或适用性

这是关于在这种情况下消息队列与共享内存的适用性或适用性: 多个DLL或共享库 每个库将尝试与我的主应用程序DLL或共享库进行通信,例如,所有DLL或共享库的I / P到O / P将通过我的主应用程序的共享库进行通信。 这些通信是asynchronous的。 一些DLL或共享库,除了我的应用程序的.so,将创build多个线程,每个这样的线程的输出需要传回到我的应用程序库。 这些线程的输出又是asynchronous的。 我的主要应用程序DLL / .so将继续与其他工作,这很可能是通过networking与一些服务器通信,并作出相应的响应 所有其他DLL / .so的function是asynchronous的 Q-1:在上述哪种情况下最合适? (I)消息队列,(II)共享内存? Q-2:使用共享内存在几个共享库之间强制同步的任何引用或链接?

为什么我不能用std = c99声明sigset_t?

如果我编译下面的程序std = c99,我得到一个错误,但程序编译罚款没有c99标志。 为什么? #include <signal.h> void x() { sigset_t dd; } int main(void) { x(); return 0; } jim@cola temp]$ gcc -std=c99 blah.c -o blah blah.c: In function 'x': blah.c:9: error: 'sigset_t' undeclared (first use in this function) blah.c:9: error: (Each undeclared identifier is reported only once blah.c:9: error: for each function it appears […]

如何使用像`GtkAttachOptions“枚举types设置小部件属性? 我试图模拟`gtk_widget_set_vexpand`在`gtk2`上工作

我的项目是创build一个graphics应用程序来帮助每个员工在中央数据库中创build自己的客户列表,唯一的问题是gtk3和gtk2之间的兼容性。 该项目始终是基于gtk3 ,然后我意识到有员工只使用gtk2的系统。 所以我对这个实现进行了一些修改,没有什么问题。 我想完成的最后一件事就是模拟gtk_widget_get_hexpand()和gtk_widget_get_vexpand()的函数……它们只在gtk3 。 对于其他function工作方式与gtk3相同,我做了这样的事情: #define gtk_grid_new() gtk_table_new(1,1,false) #define GTK_GRID(x) GTK_TABLE(x) #define GtkGrid GtkTable #define gtk_grid_attach(x1,x2,x3,x4,x5,x6) gtk_table_attach(x1,x2,x3,x3+x5,x4,x4+x6,GTK_FILL,GTK_FILL,0,0) 要让应用程序在没有gtk_widget_get_hexpand()和gtk_widget_get_hexpand()函数的情况下工作,只需: #define gtk_widget_set_hexpand(x1,x2) #define gtk_widget_set_vexpand(x1,x2) 因为用macros来模拟这些函数稍微复杂一些,我试图做这样的事情: inline void gtk_widget_set_hexpand(GtkWidget* widget,gboolean expanded) { GValue value = G_VALUE_INIT; g_value_init(&value,G_TYPE_ENUM); if(expanded) g_value_set_enum(&value,GTK_EXPAND); else g_value_set_enum(&value,GTK_FILL); gtk_container_child_set_property(GTK_CONTAINER(gtk_widget_get_parent(widget)),widget,"x-options",&value); } inline void gtk_widget_set_vexpand(GtkWidget* widget,gboolean expanded) { GValue value = G_VALUE_INIT; g_value_init(&value,G_TYPE_ENUM); if(expanded) g_value_set_enum(&value,GTK_EXPAND); […]

如何在Mono Develop(Ubuntu,Linux)中将Saltarelle C#设置为JavaScript编译器

我试图在Mono的默认控制台项目上使用Saltarelle C#编译器 using System; namespace SaltarelleConsoleTest { class MainClass { public static void Main (string[] args) { Console.WriteLine ("Hello World!"); } } } 但是当我尝试编译与terminal命令 mono lib/Saltarelle.Compiler/tools/sc.exe -reference:lib/Saltarelle.Runtime/tools/Assemblies/mscorlib.dll Main.cs -outscript:bin/main.js 发生此错误: Unhandled Exception: System.TypeLoadException: Could not load type 'Saltarelle.Compiler.Program' from assembly 'sc, Version=1.5.0.0, Culture=neutral, PublicKeyToken=a4048e8fcc593f14'. [ERROR] FATAL UNHANDLED EXCEPTION: System.TypeLoadException: Could not load type 'Saltarelle.Compiler.Program' from […]

大文件读/写在C + +的性能问题

我正在开发一个关于Qt的应用程序。 在这个应用程序中,主线程是一个Web服务器。 另一个线程有时从大文件(250MB)读取数据,并将其写入输出文件(〜2GB)。 该线程对文件执行高I / O操作,而CPU Iowait大约为70%。 我的问题是,当写入文件时,Web服务器没有快速响应。 我所理解的是服务器的qt套接字(在Linux上)是由一个连接到poll或select事件系统的系统套接字来表示的。 所以Qt发送信号到我的应用程序只有轮询发射事件。 我认为,文件写入太大的io操作可能会阻止轮询系统,所以我的qt服务器不会收到套接字事件。 当线程完成写入数据时,一切正常。 文件的写法如下所示: while(dataToRead){ // context has the list of files to read and current step dataToRead = extractData(context, &pBuffer, &sizeBuf); fwrite (pBuffer, 1, sizeBuf, pOutFile); free(pBuffer); pBuffer = NULL; // usleep(100000); } 如果我添加rest与睡眠function,这有助于避免问题,但不完全如果我不使用一个足够大的睡眠。 但睡眠太大会破坏性能,而且我是尽快生成的文件。 我做错了什么? 尽可能快地读/写文件是安全的吗? 上述function是否强制睡眠? 但是我们怎么能知道好时光呢? 我正在使用英特尔酷睿i5 2500和标准硬盘驱动器Mint LMDE,Linux 3.2.0 64位。 编辑:重现问题的示例程序可以在这里find: […]