??xml version="1.0" encoding="utf-8" standalone="yes"?>
[root@localhost bin]# ldd wkcenter
./wkcenter: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./wkcenter)
./wkcenter: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by ./wkcenter)
./wkcenter: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by ./wkcenter)
./wkcenter: /lib/libc.so.6: version `GLIBC_2.9' not found (required by ./wkcenter)
./wkcenter: /lib/libc.so.6: version `GLIBC_2.7' not found (required by ./wkcenter)
./wkcenter: /lib/libc.so.6: version `GLIBC_2.8' not found (required by ./wkcenter)
./wkcenter: /lib/libc.so.6: version `GLIBC_2.11' not found (required by ./wkcenter)
linux-gate.so.1 => (0xffffe000)
liblog4cpp.so.4 => not found
libprotobuf.so.7 => not found
libboost_filesystem.so.1.48.0 => not found
libboost_system.so.1.48.0 => not found
libboost_thread.so.1.48.0 => not found
libboost_program_options.so.1.48.0 => not found
libunwind-x86.so.7 => not found
libluabind.so.0.9.0 => not found
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x008ae000)
libm.so.6 => /lib/libm.so.6 (0x0044b000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00476000)
libc.so.6 => /lib/libc.so.6 (0x002c1000)
libpthread.so.0 => /lib/libpthread.so.0 (0x0041d000)
librt.so.1 => /lib/librt.so.1 (0x00440000)
/lib/ld-linux.so.2 (0x002a2000)
上面U字部分表示glibc及glibcxx库依赖不正确. 本h使用的Linux~译版本为Mint 11(ZUbuntu), 一般Ubuntu发行版的glibc配备非常? 但是上文中的发布的Linux版本为CentOS 5.8
使用/lib/libc.so.6 查看libc版本?.5, q远低于开发环境的2.11
GNU C Library stable release version 2.5, by Roland McGrath et al.
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.1.2 20080704 (Red Hat 4.1.2-51).
Compiled on a Linux 2.6.9 system on 2012-02-21.
Available extensions:
The C stubs add-on version 2.1.2.
crypt add-on version 2.1 by Michael Glad and others
GNU Libidn by Simon Josefsson
GNU libio by Per Bothner
NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
Native POSIX Threads Library by Ulrich Drepper et al
BIND-8.2.3-T5B
RT using linux kernel aio
Thread-local storage support included.
For bug reporting instructions, please see:
<http://www.gnu.org/software/libc/bugs.html>.
׃Linux操作pȝ的特有elf加蝲序. (可以参?a >此文). 虽然可以很大E度上解决Windows早期版本的dll hell问题, 但是l部|带来了很大隑ֺ
一般常见的解决Ҏ? 扑ֈ一个与目标Linux版本及glibc版本一致的Linux, 代码及依赖包放在之上编? 完成后再发布.q种Ҏ与Linux下常见Y件安装方法类? 但是对于商用服务器部|步骤来说未免繁? 安全性低.
q有一U方?使用静态链? 所有可执行文g文g依赖的静态库, pȝ?全部静态链接到可执行文件中,可以一ơ性解册个问?/p>
步骤:
1. 在gcc链接命o行中d-static -static-libgcc -static-libstdc++
2. 第三方依赖库打开静态链接开? 原来链?so的库,全改为链?a
3. gcc寚w接库序很敏? 链接库顺序需要按照从前至后ؓ: 目产生的静态库 > W三方库静态库 > pȝ静态库
4. 链接? 若有未解决的symbol, 可以试在最后添?lpthread?lrt解决
在发布版本Linux上运行可能遇到的问题:
terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid
解决Ҏ: 执行之前q行export LC_ALL="C"
ServicePath=/usr/local/bin ServiceList=( "wkcenterd --toc /home/davy/dev/kaze/Config/CenterService.toc --logfile /tmp/centerd.log" "wkagentd --toc /home/davy/dev/kaze/Config/AgentService.toc --logfile /tmp/agentd.log" ) StartAll() { for((i = 0;i<${#ServiceList[*]};i=i+1)) do echo "start:" $ServicePath/${ServiceList[i]} $ServicePath/${ServiceList[i]} > /dev/null & done } StopAll() { for((i = 0;i<${#ServiceList[*]};i=i+1)) do echo "stop:" $ServicePath/${ServiceList[i]} svcname=`echo ${ServiceList[i]} | awk '{print $1}'` killall $svcname > /dev/null done } RestartAll() { StopAll StartAll } InstallService() { svcname=`basename $0` chmod +x $svcname cp $svcname /etc/init.d ln /etc/init.d/$svcname /etc/rc3.d/S03$svcname ln /etc/init.d/$svcname /etc/rc0.d/K03$svcname chkconfig --add $svcname chkconfig $svcname on chkconfig --list | grep $svcname } UninstallService() { svcname=`basename $0` chkconfig --del $svcname rm -f /etc/init.d/$svcname rm -f /etc/rc3.d/S03$svcname rm -f /etc/rc3.d/K03$svcname } case "$1" in start) StartAll ;; stop) StopAll ;; restart) RestartAll ;; install) InstallService ;; uninstall) UninstallService ;; *) echo "Usage: service $EXEC {install|start|stop|restart|uninst}" exit 1 esac exit $?
以下虚拟机内系l叫Guest, q行VMWare的系l叫Host
VMWare的网l方式设为Bridge模式. 注意Host-Only模式只能与Hostq接,局域网的机器及互联|机器无法访?/p>
在Guest的网l设|中,IP讄ZHost在一个局域网|段的IP, 讄DNS
关闭Guestpȝ
接下来将Host的可以上|的q接d׃n,q连接到VMNet1
q入Guestpȝ, 试上网
VC有个让新手抓狂的地方, 把工E\径作试模式时的进E当前目?
估计很多新手因ؓ打不开文g而耗费大量的时?甚至攑ּ
以前使用UWindows方式解决q种问题:
1: #include <Shlwapi.h>
2: #include <shlobj.h>
3:
4: #pragma comment(lib,"shlwapi.lib")
5:
6: wchar_t exename[MAX_PATH];
7: ::GetModuleFileName(NULL,exename,MAX_PATH);
8: ::PathRemoveFileSpec( exename );
9: ::SetCurrentDirectory( exename );
需要跨q_?可以q样?
1: #include <direct.h>
2: #include <boost/filesystem.hpp>
3:
4: int main(int argc, char* argv[])
5: {
6: _chdir( boost::filesystem::path( argv[0] ).remove_filename().string().c_str() );
7: }
typedef struct tagTHREADNAME_INFO
{
DWORD dwType; // must be 0x1000
LPCSTR szName; // pointer to name (in user addr space)
DWORD dwThreadID; // thread ID (-1=caller thread)
DWORD dwFlags; // reserved for future use, must be zero
} THREADNAME_INFO;
void SetThreadName( DWORD dwThreadID, LPCSTR szThreadName )
{
THREADNAME_INFO info;
info.dwType = 0x1000;
info.szName = szThreadName;
info.dwThreadID = dwThreadID;
info.dwFlags = 0;
// Visit http://m.shnenglu.com/sunicdavy for original article
__try
{
RaiseException( 0x406D1388, 0, sizeof(info)/sizeof(DWORD), (DWORD*)&info );
}
__except(EXCEPTION_CONTINUE_EXECUTION)
{
int a =1;
}
}
使用期间一直正? 随着工程需求变?我需?strong>频繁?/strong>一个被命名的线E创建工作一D|间后马上l束释放资源q新创?/strong>,出现了死锁问?/p>
死锁L发生在主U程的Sleep或者是SetEvent两个WindowsAPI函数. 而且仅仅在Visual Studio 2008里调试时会发生死?q调试环境一切正? 我开始打日志调试, l果发现死锁前能够正常创建线E?但是U程函数Ҏ没有调用q入.之后在ȝESleep处死锁了. ׃SetThreadName没有使用正规的API接口,而是使用抛异常方? 而且U程名称应该只在Visual Studio IDE中才能显C? MSDN对RaiseException的描q里也有说明可以使用WaitForDebugEvent接收应用E序抛得异常.因此可以推断是SetThreadName造成的问? 屏蔽SetThreadName,试通过
]]>
记得很早以前qqGetPrivateProfile*pȝINId函数Q有一个问题很?ini的文件\径必Ll对路径Q否则即便工作\径是讄正确的,也是无法d到ini文g。以前有查过Q说是内部搜索\径的问题。默认是在system32L?Q?q前的处理方法就是把l对路径拿过来和当前路径l合后传lGetPrivateProfile*pAPI?/p>
之后Q我自己一直是用自己封装的文本解析cLdiniQ很久没这个APIQ也没有\径烦?/p>
今天再次到Q故询问了下其他人有没有什么好的方法:
只需要将路径改ؓ当前路径标识卛_Q即Q?/strong>
setting.ini --> ./setting.ini
再次诅咒q个恶心的API
#define MS_VC_EXCEPTION 0x406d1388
typedef struct tagTHREADNAME_INFO
{
DWORD dwType; // must be 0x1000
LPCSTR szName; // pointer to name (in same addr space)
DWORD dwThreadID; // thread ID (-1 caller thread)
DWORD dwFlags; // reserved for future use, most be zero
} THREADNAME_INFO;
void SetThreadName(DWORD dwThreadID, LPCTSTR szThreadName)
{
THREADNAME_INFO info;
info.dwType = 0x1000;
info.szName = szThreadName;
info.dwThreadID = dwThreadID;
info.dwFlags = 0;
__try
{
RaiseException(MS_VC_EXCEPTION, 0, sizeof(info) / sizeof(DWORD),
(DWORD *)&info);
}
except (EXCEPTION_CONTINUE_EXECUTION)
{
}
}
U程名称限制?个ANSI字符?调用q个函数?触发一个调试器异常,VC调试器将会把字符串设|ؓU程名称,q在调试器中昄
但是感觉q个词貌似是学多了英语后的h拼出来?旉长了,大家习惯了这个叫?q个词也出来了.
在Windows Vista或者Windows 7?q个词变成了 "副本", 估计是微软也发现"复g"q个词不是很正规或者让人接受而换?/p>
:)
1. RenderMonkey 1.82 在这U升U版本下会启动会报MSXML错误
2. VS2010 安装完成? C#和WPF工程都无法正常创?打开vs2008及老的sln,project都会出现卡死,甚至崩溃的错? 估计也是MSXML的问?/p>
解决Ҏ:安装Windows 更高版本或者直接用原生Windows SP3
Windows7默认点击快速启动中的资源管理器弹出的不是“我的电脑”,而是恶心的“库”。程序员的电脑都是井井有条的Q因此“库”这U东西只会让每次重装pȝ后大喊后悔。有一个简单的Ҏ可以让其直接q入“我的电脑?/p>
右键点击快速启动的图标Q在弹出的菜单从下往上的“Windows资源理器”上点击右键Q点d性。,在“快h式”标{目标?windir%\explorer.exe”后加入一个空格和一个逗号Q如?windir%\explorer.exe ,”(没有双引PQ即可?/p>
如果用过VistaQ那么Windows 7只能说是方便了,而不能说是漂亮了。但是如果直接从XPq来Q那么就会感觉Windows 7非常漂亮。Windows 7的驱动兼Ҏ很好。我安2005q的BenQ本子所有驱动,包括d器都可以通过自动更新扑ֈ。另外,E序兼容性也没有那么夸张Q基本上大部分的E序都可以兼容,特别是兼容Vista的,基本都可以跑在Windows 7下。即便不能兼容的E序Q就像当q?8/2000到xp一P调节下兼Ҏ就可以了?/p>
如果你用Windows 7来工作,那么恭喜你,Windows 7的用效率是很高的。还在XP?大页开始菜单中找Visual Studio么?q在调节控制面板?8时代的经典菜单,一个一个的N火墙么? 只需要在开始菜单里输入你要扄东西Q很快就可以扑ֈq些功能?/p>
虽然Windows 7的jumplist是抄袭MacOSQ但转过来想惻IWindows本n何不是从Mac抄袭q来的呢Q除了jumplistQ还有一个功能也怸般很难被发现Q用鼠标中键点击d栏,可以启动q个E序的新实例。这个对于Chromeq种多进E浏览器来说实在是很方便的事情?/p>
工作中,公司q在使用VS2005Q但是第一ơ用,不小心习惯性的调整C兼容XP模式Q结果不是IDEq是~译器,一直报错。后来查q网站后Q才发现QVS2005l对不要在Windows 7下打开兼容性?/p>
另外Q很多VPN׃Vista以上pȝ的安全性问题,都不能在Windows 7下用了。另外让公司配机器又很麻烦,q时最好的Ҏ是装一台虚拟机QVMWare+ xpQ?0分钟装完可以用了。比Windows 7自带的那个要求低多了Q而且q可以在里面跑DX一cd形程序,比远E桌面方便多?/p>
很多人喜Ƣ将东西攑֜桌面Q这倒也W合工作习惯Q但是经q长旉后,桌面会变得凌׃堪,虽然Windowsq段旉会有自动桌面清理Q但也仅仅是文件放|在桌面的一个文件夹中。ؓ什么不学下qq mail里的中{站,7天后都用后自动清理Q而且win2000里的动态桌面到了后面的版本取消了Qؓ什么不能这些功能放到web上?q样做对于家用确实会很方?/p>
q有是最严重的Windows Media PlayerQ将一文gҎ入居然不能播放这个文件夹。徏立好一个播攑ֈ表后Q仍然不能拖入文件夹Q真不知道MS的开发者^时用不用q个软g。?/p>