Apr28

【原创】C++程序静态链接编译log4cplus的问题小记

Author: leeon  Click: 13219   Comments: 1 Category: Linux C/C++编程  Tag: pthread,log4cplus,linux

今天将log4cplus引入自己的程序,由于log4cplus需要线程库的支持,在静态编译的时候加上了-lpthread,但是始终在编译的时候提示找不到线程函数:

[code="plain"]
liblog4cplus.a(socketappender.o): In function `log4cplus::thread::PthreadMutexAttr::set_type(log4cplus::thread::Mutex::Type)':
../include/log4cplus/helpers/syncprims-pthreads.h:80: undefined reference to `pthread_mutexattr_settype'
liblog4cplus.a(socketappender.o): In function `~PthreadMutexAttr':
../include/log4cplus/helpers/syncprims-pthreads.h:58: undefined reference to `pthread_mutexattr_destroy'
liblog4cplus.a(socketappender.o): In function `ManualResetEvent':
../include/log4cplus/helpers/syncprims-pthreads.h:200: undefined reference to `pthread_cond_init'
liblog4cplus.a(socketappender.o): In function `~PthreadMutexAttr':
../include/log4cplus/helpers/syncprims-pthreads.h:58: undefined reference to `pthread_mutexattr_destroy'
liblog4cplus.a(socketappender.o): In function `~ManualResetEvent':
../include/log4cplus/helpers/syncprims-pthreads.h:210: undefined reference to `pthread_cond_destroy'
../include/log4cplus/helpers/syncprims-pthreads.h:210: undefined reference to `pthread_cond_destroy'
liblog4cplus.a(socketappender.o): In function `log4cplus::thread::ManualResetEvent::timed_wait(unsigned long) const':
../include/log4cplus/helpers/syncprims-pthreads.h:272: undefined reference to `pthread_cond_timedwait'
[/code]

于是搜索发现必须在编译的时候加上"-pthread" 才能正常编译通过。

附上g++中-pthread和-lpthread的区别说明文章:

http://blog.chinaunix.net/uid-25909722-id-3026989.html

http://chaoslawful.iteye.com/blog/568602

http://kasicass.blog.163.com/blog/static/395619200992410313759/

Apr27

【原创】使用Netbeans7.1静态编译应用程序

Author: leeon  Click: 6422   Comments: 0 Category: Linux C/C++编程  Tag: netbeans,static,compile,link,lib

最近项目使用到很多外部开源库,但是动态链接对于程序的移植和部署带来极大的不变,本人一直用netbeans写linux c/c++程序,但是静态链接并不好使,在配置选项中加上-static老是编译不通过提示头文件找不到。网上压根就没现成的讲解,自己摸索把问题搞定了。

1.首先把需要链接的静态库放到编写的代码同级目录中。

2.然后根据如图所示配置即可:

 

Apr26

【原创】使用STL来构造字符串split 和join方法

Author: leeon  Click: 8767   Comments: 1 Category: c/c++  Tag: c++,stl,php,implode,explode,split,join

学了几天c++的STL基本语法,写的很搓,不过功能算是基本实现了,类似于php中的implode和explode

[code="cpp"]
vector splitString(const string str,const string w){
vector arr;
string tmp;
long index = 0;
tmp = str;
while((index=tmp.find(w))!=str.npos){
arr.push_back( tmp.substr(0,index));
tmp = tmp.substr(index+1);
}
if(tmp==""){
return arr;
}
arr.push_back(tmp);
return arr;
}

string joinString(const vectorv, const string w){
if(v.empty()) return "";
string tmp="";

if(v.size()==1)
return v[0];

for(int i=0;i if(i==(v.size()-1)){
tmp +=v[i];
}else{
tmp +=v[i]+w;
}
}

return tmp;

}
[/code]

Apr18

【原创】c/c++读取MySQL中空字段的注意事项

Author: leeon  Click: 7898   Comments: 0 Category: c/c++  Tag: c,c++,mysql,null

最近用Linux c/c++写一个项目,自己封装了一个MySQL控制类,但是每次在循环的时候都出现异常退出而不能正常赋值数据集的问题。索性厚着脸皮打扰了很多开发让帮忙查问题,还好最终把问题定位到了。由于读取到的MYSQL_ROW类型数据是NULL,导致在for循环创造数据集二维数组的时候意外跳出内层循环,导致赋值补全。

因此大家一定要在用mysql c api调用的时候保证db中创建的字段不能有NULL,必须对每个字段设定默认值。

附送一个代码案例,不仅在mysql读取中有这个问题,普通的for循环中NULL赋值也会造成循环体异常退出。

[code="cpp"]
#include<stdio.h>
#include<iostream>
using namespace std;

int main(){
char *arr1[3]={"AA","BB","CC"};
char *arr2[3]={"AA",NULL,"CC"};
for(int i=0;i<3;i++){
cout<<*arr1[i]<<endl;
}
for(int i=0;i<3;i++){
cout<<arr2[i]<<endl;
}
return 0;
}
[/code]

输出:

[code="plain"]
A
B
C
AA


运行 成功 (总计时间: 203毫秒)
[/code]

此时会注意到arr2字符串数组遇到NULL而导致CC"没输出出来。

分类

标签

归档

最新评论

Abyss在00:04:28评论了
Linux中ramdisk,tmpfs,ramfs的介绍与性能测试
shallwe99在10:21:17评论了
【原创】如何在微信小程序开发中正确的使用vant ui组件
默一在09:04:53评论了
Berkeley DB 由浅入深【转自架构师杨建】
Memory在14:09:22评论了
【原创】最佳PHP框架选择(phalcon,yaf,laravel,thinkphp,yii)
leo在17:57:04评论了
shell中使用while循环ssh的注意事项

我看过的书

链接

其他

访问本站种子 本站平均热度:8823 c° 本站链接数:1 个 本站标签数:464 个 本站被评论次数:94 次