Articles of c + +

链接错误“未定义的参考”在编译期间关于boost静态库

我想用boost库1.57来编译Linux x64上的C ++项目。 这个项目是用scons编译的,我在Arch Linux上成功编译了,但是这次在Ubuntu机器上失败了。 我添加了-lboost_coroutine标志进行链接,但错误“未定义的引用”仍然存在。 /usr/bin/g++ -o build/gcc.release/app -pthread -g build/gcc.release/src/han/unity/rpcx.o -lpthread -lz -lboost_coroutine -lboost_context -lboost_date_time build/gcc.release/src/han/unity/rpcx.o: In function `attributes': /usr/local/include/boost/coroutine/attributes.hpp:31: undefined reference to `boost::coroutines::stack_traits::default_size()' 我注意到属性.hpp恰好是boost协程头文件之一。 我试图用nm来提升协程库,似乎没有问题。 nm /usr/local/lib/libboost_coroutine.a | grep "default_size" 0000000000000170 T _ZN5boost10coroutines12stack_traits12default_sizeEv 我search了这个错误的可能原因,大部分是关于链接器标志的顺序。 在这种情况下,rpcx.o取决于boost_coroutine,所以这出现在前面。 还有什么可能的原因?

–Wunusedvariables编译器说错误

最近我开始用C + +编程(我来自Java,这花了我一点点改变哈哈)。 在Windows下一切正确。 问题是,我切换到Linux,这是我有问题的编译器。 通常当你声明一个variables而没有使用时,编译器会显示一个“警告”,表示这个variables没有被使用,但是我(在linuxmint 15下)把我当作“错误”抛出,并且没有编译:C不知道有没有人发生过这样的事情,但是在制作大型节目时(不止一节课)我生病了。 一个小例子:

通过蓝牙连续传输数据

我想生成0到100之间的随机数,并通过蓝牙连续地从Raspberry Pi(运行Linux)传输到embedded式(x86)PC(也运行Linux)。 我的C代码基于以下内容: 客户端: – #include <stdio.h> #include <unistd.h> #include <sys/socket.h> #include <bluetooth/bluetooth.h> #include <bluetooth/rfcomm.h> int main(int argc, char **argv) { struct sockaddr_rc addr = { 0 }; int s, status; char dest[18] = "01:23:45:67:89:AB"; // allocate a socket s = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM); // set the connection parameters (who to connect to) addr.rc_family = […]

无法用twitcurl编译程序

我想在Linux上用twitter库编译一个C ++程序。 我目前使用twitcurl作为twitter API库,并安装了g ++以及官方网站上列出的所有必需的文件和软件包: http : //code.google.com/p/twitcurl/wiki/WikiHowToUseTwitcurlLibrary 但是,当我编译我的程序使用这个命令g++ twitterClient.cpp -ltwitcurl ,我得到这个错误: cannot find -ltwitcurl 我也使用CodeBlocks的IDE编译它,但得到这个错误: undefined reference to twitCurl::~twitCurl() ` 我的代码只包含几行: #include <iostream> #include "Twitter/Twitter.hpp" using namespace std ; int main () { Twitter t ; return 0 ; } 我已经花了很多时间在这个上,但是我无法解决这个问题。 我应该怎么做才能在命令行和CodeBlocks上编译程序?

FreeTDS:如何设置运行存储过程的参数字符集

我有一个C程序通过FreeTDS连接到MSSQL数据库。 我试图执行一个存储过程与varchar参数设置为“SaídaLiberada”,但它存储与奇怪的字符在MS SQL,如上面的截图: 这是我的freetds.conf: # $Id: freetds.conf,v 1.12 2007/12/25 06:02:36 jklowden Exp $ # # This file is installed by FreeTDS if no file by the same # name is found in the installation directory. # # For information about the layout of this file and its settings, # see the freetds.conf manpage "man freetds.conf". […]

numa,mbind,segfault

我已经使用valloc分配内存,比方说[15 * sizeof(double)]的数组A. 现在我把它分成三块,我想把每块(长度为5)绑定到三个NUMA节点(比如说0,1和2)。 目前,我正在做以下工作: double* A=(double*)valloc(15*sizeof(double)); piece=5; nodemask=1; mbind(&A[0],piece*sizeof(double),MPOL_BIND,&nodemask,64,MPOL_MF_MOVE); nodemask=2; mbind(&A[5],piece*sizeof(double),MPOL_BIND,&nodemask,64,MPOL_MF_MOVE); nodemask=4; mbind(&A[10],piece*sizeof(double),MPOL_BIND,&nodemask,64,MPOL_MF_MOVE); 第一个问题是我做对了吗? ie是否有任何问题,正确alignment页面大小例如? 目前arraysA的大小为15,运行良好,但是如果我将数组大小重置为像6156000和piece = 2052000之类的值,随后三次调用mbind以&A [0]开始,&A [2052000]和&A [4104000 ]然后我得到一个分段错误(有时它只是挂在那里)。 为什么它运行小尺寸罚款,但更大给我段错误? 谢谢。

我怎么知道一个Linux系统调用是否是线程安全的?

linux中的一些函数用_r标记“线程安全”(例如gmtime_r),但是大部分系统调用都没有标记,也没有在手册中提及。 所以我的问题是:我怎么知道一个Linux系统调用是否线程安全? 谢谢!

交叉编译PowerPC架构的Boost库

我正在尝试为PowerPC体系结构交叉编译Boost库(Thread,System)。 我遵循下面的步骤,但面临的问题。 我运行一个shell脚本来设置我的工具链。 编译器ppc_4xx-g ++在shell中可见。 步骤如下: 添加一行“using gcc:power:ppc_4xx-g ++;” 到文件user-config.jam 在根目录下运行./bootstrap.sh –prefix = BoostPowerPC。 运行./b2 install –build-dir = BoostPowerPC工具集= gcc-power –with-thread –with-system stage 结果:所有的目录被创build,但编译失败。 我不能附上错误日志(请给我你的电子邮件,以便我可以发送错误日志,如果你需要的话)。 以下是错误日志的快照。 Component configuration: – atomic : not building – chrono : not building – context : not building – date_time : not building – exception : not building – filesystem […]

C ++和Xlib – 中心窗口

我已经开始直接学习基于XLib的GUI应用程序编程,并且试图在屏幕上创build一个居中的窗口。 我不知道用来达到这个目的的常用技术。 我的代码(这是行不通的)是这样的(我使用CodeBlocks) #include <stdio.h> #include <stdlib.h> #include <X11/Xlib.h> #include <X11/Xutil.h> #include <X11/Xos.h> #include <X11/Xatom.h> #include <X11/keysym.h> #include <GL/glew.h> #include <GL/freeglut.h> int screen; Display *display; XSetWindowAttributes window_attributes; Window mainwindow; XEvent events; int main(int argc, char** argv) { display = XOpenDisplay(NULL);screen = DefaultScreen(display); window_attributes.background_pixel = XWhitePixel(display, screen); window_attributes.border_pixel = XBlackPixel(display, screen); window_attributes.win_gravity = SouthWestGravity; mainwindow = […]

sleep()是否干扰scanf()?

我有两个线程 xThread :连续在控制台上打印X. inputThread :从stdin获取input 当用户input“C”或“c”时停止连续打印 #include<stdio.h> #include<sys/select.h> #include<pthread.h> #define S sleep(0) int read_c = 0; pthread_mutex_t read_c_mutex = PTHREAD_MUTEX_INITIALIZER; void* inputThread_fn(void* arg) { char inputChar; while(1) { S; printf("\nChecking input"); scanf("%c",&inputChar); if(inputChar=='C' || inputChar == 'c') { pthread_mutex_trylock(&read_c_mutex); /*<–This must be _lock ? because with the use of trylock even If i don't aquire […]