星期六, 六月 27, 2009

如何处理CodeBlock编译链接出现undefined rererence 的错误.

编译时候出现 :filename.cpp|| undefined reference to `CoCreateInstance@20
这种错误,是codeblock的一个bug.
需要把 链接的库加载项目的的鼠标右键的properties..里,而不是build options..里
选择properties打开project/target options窗口,右下角的按钮 Project's build options...打开
Project build options窗口,这个窗口同项目鼠标右键菜单中的build options竟然不同一,所以在设置中往往
在“正确”设置后,出现了错误,这两个窗口往往都需要同时设置,从最后产生的编译命令行分析,不过是重复加入,实在是奇怪。

需要把mingw\lib下面的库和wxWidges lib\gcc_lib或gcc_dll下面的库都加入到 ,Link  setting 下的link Libraries 里,全部加入


星期五, 六月 26, 2009

JBOSS通过JAAS框架验证用户后,如何得到用户所有的角色?

代码:

private void findRole() throws PolicyContextException {

// Get the Authenticated Subject
Subject subject = (Subject) PolicyContext.getContext("javax.security.auth.Subject.container");

// Now look for a Group called Roles
Set principals = subject.getPrincipals(Principal.class);
Iterator iter = principals.iterator();
while(iter.hasNext()) {
Principal p = (Principal)iter.next();
if(p instanceof SimpleGroup) {
SimpleGroup sg = (SimpleGroup)p;
if("Roles".equals(sg.getName())) {
Enumeration en = sg.members();
while(en.hasMoreElements()) {
String role = en.nextElement().toString();
if(role != null) {
setRole(role);
}
}
}
}
}
}

星期一, 六月 22, 2009

如何在wxWidgets 编译生成wxdbgrid组件

命令行,

wxWidgets-2.8.10\build\msw>mingw32-make -f makefile.gcc UNICODE=1 BUILD=release MONOLITHIC=0  USE_ODBC=1 USE_GUI=1


则lib\gcc_lib下得到libwxmsw28u_dbgrid.a

星期四, 六月 11, 2009

如何用cygwin在控制台 显示彩色的字符

由于cygwin支持mingw,而mingw是不依赖cygwin.dll的。而cygwin.dll是在window下模拟
Linux的API的库,这样造成了一些现实彩色字符的不同技术。

cygwin.dll直接至此ANSI 颜色控制,支持ESC 累得颜色编码,所以直接用printf("\033[1;34m hello \033[0m“)就可以打印出一个蓝色的字符串了。

 但是如果不是用cygwin.dll,而是通过-mno-cygwin编译选项,是用window crt.dll库,则ANSI颜色控制码失去了作用。此时必须使用window下的方法。

 所以,这就要求代码能区别本程序的依赖,是否使用了-mno-cygwin编译出来的代码。

 通过深入研究,发现了 -mno-cygwin编译的依赖宏,并在自己的程序根据是否有特定的宏的出现,作为信号灯来识别。
步骤如下:
发现编译器预编译的宏
g++-3 -E -dM  -mno-cygwin -c testdb.cpp  >2.txt
 生成编译器预编译文件,发现了定义的宏,通过搜索发现了:__MINGW_H 宏。
因此在自己的文件中加入:

#ifdef __MINGW_H
static int MINGW_FLAG=1;
#else
static int MINGW_FLAG=0;

Linux ANSI 颜色控制

控制码 ^ESC,在VI状态下用Ctrl+v,ESC的组合输入,


在C语言中,可以通过printf直接打印出控制符号


ANSI控制码的说明

具体的摘抄一些如下:
[0m 关闭所有属性
[1m 设置高亮度
[4m 下划线
[5m 闪烁
[7m 反显
[8m 消隐
[30m -- [37m 设置前景色
[40m -- [47m 设置背景色
[nA 光标上移n行
[nB 光标下移n行
[nC 光标右移n行
[nD 光标左移n行
[y;xH设置光标位置
[2J 清屏
[K 清除从光标到行尾的内容
[s 保存光标位置
[u 恢复光标位置
[?25l 隐藏光标
[?25h 显示光标

星期日, 六月 07, 2009

SQLITE 使用g++来编译

http://www.mail-archive.com/sqlite-users@sqlite.org/msg30132.html

SQLite is ANSI C, so youshould compile it with gcc. It will still be usable within your C++library/project, as sqlite3.h qualifies all functions extern "C".

gcc -c sqlite3.c

g++ -c main.cpp

g++ -o program main.o sqlite3.o -lpthread -ldl