Posted on 15-02-2017
Filed Under (技术) by waterlin

Visual Studio 2015 可以作为Linux开发和调试的利器了,很好用,按这篇文章配好环境就可以开始愉快的编码了。

但是如果在这里用 CMake 来构建工程,可能要注意一下:

1. 需要把 cmake 工程文件设置为自动拷贝到服务器

vc-linux-cmake-1.png

2. 需要配置一个编译命令和路径,因为 VS 默认的工作目录和我们在Linux上时是不一样的

比如,针对 Debug 模式可以是这样的:

vs-linux-cmake-2.png

上面红线的内容是类似这样的:

cd ~/projects/LiveQualityMonitor/debug; cmake -DCMAKE_BUILD_TYPE=Debug ..; make
~/projects/LiveQualityMonitor/debug/LiveQualityMonitor

针对 Release 模式是这样的:

vc-linux-cmake-3.png

上面红线的内容是类似这样的:

cd ~/projects/LiveQualityMonitor/release; cmake -DCMAKE_BUILD_TYPE=Release ..; make
~/projects/LiveQualityMonitor/release/LiveQualityMonitor

这样就可以用 cmake 来构建工程了,如果别人不用 Visual Studio,也同样可以用原来的 cmake 方法直接上 Linux 服务器去手动编译。

(0) Comments    Read More   
Posted on 20-02-2014
Filed Under (技术) by waterlin

有关 Linux 下 ulimit 和文件句柄数量的笔记。

ulimit 的基本印象

反复用 Open 来打开文件,会提示出一个文件句柄错误:

open64
: Too many open files

这是因为 Linux 的 Open 函数会有一个句柄上限:包括软上限和硬上限。

注意细节

对于 ulimit 里做的限定,是指进程同时打开的句柄数量,而不是累加的。

所以,我们需要在程序里及时关闭不需要的句柄。

fopen 及 socket 通讯的 accept 等,都会增加 ulimit 里的文件句柄数量。

基本 ulimit 值

其实 ulimit 命令本身就有分软硬设置,加 -H 就是硬,加 -S 就是软。硬上限和软上限的区别是:硬限制是实际的限制,而软限制是 warnning 限制,只会做出 warning。

你可以用 ulimit 命令来对这些变量进行查询与修改。比如说,我如果要查询 open 文件句柄的软上限,可以用命令:

$ ulimit -Sn

要查询 open 文件句柄的硬上限,可以用命令:

$ ulimit -Hn

我们可以用 ulimit -a 来查看所有限制值:

$ ulimit -a

在 Linux 下面部署应用的时候,有时候会遇上

Socket/File: Can't open so many files

的问题,其实就是 Linux 是有文件句柄限制的,而且默认不是很高,一般都是1024。作为一台生产服务器,其实很容易就达到这个数量,因此我们需要把这个值改大一些。

如果需要临时修改这个值,可以用下面的命令来使得 open 打开的文件句柄硬上限为 9999:

$ ulimit -SHn 9999

可以使用下面的设置来使得文件句柄的软上限为 2048:

$ ulimit -SSn 2048

开机启动设置 ulimit 值

如果你需要在开机的时候,就自动设置 ulimit 的值,可以使用下面的方法,在 Ubuntu 下的方法可以查看这里。简单来讲,是这样简单的几个步骤:

可以修改下面的配置:

/etc/security/limits.conf

修改下面两项:

* hard nofile 65535
* soft nofile 65535 

(0) Comments    Read More   
Posted on 07-05-2012
Filed Under (技术) by waterlin

在 Linux 下用 GCC 编译 C++ 代码,提示类似

SSE2 instruction set not enabled

这样的错误,则可以在 GCC 里添加参数来完成编译:

-msse2
(0) Comments    Read More   
Posted on 14-12-2011
Filed Under (技术) by waterlin

最近在 Linux 下使用 log4cxx 库,使用的 log4cxx 版本为 0.10.0,结果无法显示中文日志信息。

这可怎么办呢?我不可能把中文日志全部一行一行替换为英文的,这可是一个非常傻B的举动。

经过研究,终于知道需要经过如下步骤才能让 log4cxx 在 Linux 下正常显示中文日志:

  1. 你可以先 locale 检查一下 Linux 终端环境是不是 zh_CN ;

    $ locale
    
  2. 如果你的是 en_US 之类的编码,则需要把 locale 设置为简体中文:
    $ export LC_ALL="zh_CN.UTF-8"
    

    如果你的系统提示说没有安装本字符集,则需要用命令进行安装:

    $ sudo apt-get install language-pack-zh-hans
    
  3. 在程序里设置应用程序的 locale 和终端一样:
    LoggerPtr logger;
    log4cxx::PropertyConfigurator::configure("./log4cxx.properties");
    logger= Logger::getLogger("test") ;
    logger->info(("Start logging"));
    setlocale(LC_ALL, "zh_CN.UTF-8");   
    

    关键是最后这一句 setlocale,要设置得和终端一样,都是 zh_CN.UTF-8。

这样,你的程序就可以用 log4cxx0.10.0 输出中文日志信息了。

(2) Comments    Read More   
Posted on 25-11-2011
Filed Under (技术) by waterlin

今天在 Ubuntu 下使用 OpenCV 来读取一个视频,碰到了下述问题:

  1. 自己手动安装的 OpenCV2.2.0 无法正确读取视频内容,用函数 cvCaptureFromAVI() 及 cvGetCaptureProperty() 均提示说失败:

    所有的测试视频在 Windows 下用 OpenCV2.2.0 是可以正常读取的,应该是 ffmpeg 安装不完全或是不正确。

  2. 从源里安装 OpenCV2.1 后,可以打开视频读取数据,可是在读取视频帧内容的时候,却提示如下错误:
    [swscaler @ 0x94b3e80]No accelerated colorspace conversion found from yuv420p to bgr24.
    

    这个问题应该是 OpenCV 在用 ffmpeg 解压 yuv420 数据时出错。

对于上述问题,可以采用下面的办法来解决:

  1. 重新安装 ffmpeg x264:Install and use the latest FFmpeg and x264
  2. 再重新安装 OpenCV,经测试,可以正确安装 OpenCV 2.3.1 版本,安装成功后,视频读写一切正常。

另外:如果是在 Ubuntu-Server 版下安装 OpenCV,在安装 libhighgui-dev 的时候,需要安装很多和桌面相关的依赖包。

(0) Comments    Read More   
Posted on 14-07-2011
Filed Under (技术) by waterlin

在 Linux 下,如果你写好了自己的动态链接库,需要在其它程序里调用,则需要让这些程序能找到这些动态链接库。如果设置不对,会出现类似如下的错误:

test: error while loading shared libraries: libexampleso.so.0: cannot open shared object file: No such file or directory

这是因为没有把动态链接库的安装路径(例如说是 /usr/local/lib )放到变量 LD_LIBRARY_PATH 里。

这时,可以用命令 export 来临时测试确认是不是这个问题:

export LD_LIBRARY_PATH=/usr/local/lib

在终端里运行上面这行命令,再运行这个可执行文件,如果运行正常就说明是这个问题。

接下来的问题是:以上做法,只是临时设置变量 LD_LIBRARY_PATH ,下次开机,一切设置将不复存在;如何把这个值持续写到 LD_LIBRARY_PATH 里呢?

我们可以在 ~/.bashrc 或者 ~/.bash_profile 中加入 export 语句,前者在每次登陆和每次打开 shell 都读取一次,后者只在登陆时读取一次。我的习惯是加到 ~/.bashrc 中,在该文件的未尾,可采用如下语句来使设置生效:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

修改完后,记得关掉当前终端并重新打开一个新的终端,从而使上面的配置生效。

(0) Comments    Read More   
Posted on 12-07-2011
Filed Under (技术) by waterlin

我的笔记本电脑因为之前分区的原因,没有办法安装双系统,导致调试 Linux 程序诸多不便。如果你也有这种情况,或是有很多事情都需要同时在 Windows 和 Linux 下处理,可以和我一样,在本地装一个 VirtualBox 虚拟 Ubuntu 环境,配好相应的开发环境后,从事 Linux 代码的开发与调试工作。

主要思路

把这个 VirtualBox 里的 Linux 当成服务器,用 putty 连上去,慢慢调试;本地文件,可以用 Eclipse 编辑好,通过文件共享或是 SCP 的方式,传到虚拟机里的 Linux 服务器里。

主要配置步骤

  1. 根据VirtualBox 与宿主机器有四种网络设置方式的介绍,把 VirtualBox 里的 Linux 上网方式设置成为 Bridged networking 模式,这样,你在宿主机器里就可以把这个虚拟机当成普通服务器;
  2. 根据你自己的需要,配置 Linux 服务器环境;
  3. 配置并开启虚拟机里 Ubuntu 的 SSH 服务

    详细的 SSH 配置方法可以看一下在 Ubuntu 下开户 ssh 服务里的介绍。

  4. 同步文件到 Ubuntu 服务器

    可以用 WinSCP 同步 Windows 系统里的文件到 Ubuntu 里,当然,也可以采用 FTP 或是 SFTP 之类的软件来同步文件。

PS:如果你觉得用 WinSCP 来同步文件略显麻烦,你可以在 Windows 里设置一个供 Ubuntu 使用的共享目录,然后你直接把东西扔到这个目录,就可以在 Ubuntu 里访问相关的文件;当然,使用这种方法,你要小心保护好你的文件,不要轻易地删除共享目录里的文件。

出于模拟及方便的角度,我依然推荐使用 WinSCP 的方式来同步文件。

(0) Comments    Read More   
Posted on 04-01-2010
Filed Under (技术) by waterlin

系统字体配置能让系统变得更养眼,对于整天在电脑前打发时间的我们,很重要!

详情可以看 Ubuntu 官方文档

用 Synaptic 自动安装

在 Synaptic 包管理器里输入 font 关键字,会有上百个相关的安装信息。

软件包 mscorefonts 包含了微软免费的 web 字体,比如说 Times New Roman,Courier New 等。

在安装好了 mscorefonts 字体软件包后,要让你的程序能识别这些字体,需要重启想使用新字体的程序。

手动安装

在 Ubuntu/Debian 下,我们也可以很方便地手动安装字体(这里只关心技术问题,不讨论版权相关问题)。

比如说我想使用 Windows 的字体,只要在 Windows 的系统目录 C:\WINDOWS\Fonts 里把想要安装到 Linux 的字体拷到 Linux 下面,然后用 Alt-F2 输入下面的命令:

gksu nautilus /usr/share/fonts/truetype

在弹出来的文件浏览器里创建一个你自己容易记的名字(好备份嘛!),把那些 truetype 字体文件放到该文件夹里,再使用命令 Alt-F2 并把 ‘run in terminal’ 这个选项给勾上。然后再输入下面的命令:

sudo fc-cache -f -v

这样就完成了字体的安装。当然,你要使用新字体,需要重启你的应用程序甚至有可能要重启你的系统。

对于个人用户来说,安装字体最方便地方法是把字体文件放到 home/<username>.fonts 文件夹里,当然这个方法安装的字体只对当前用户有效;如果需要在全部用户里共享字体,则依然需要安装在 /usr/share/fonts 目录里。

原创文章,如转载请注明:转载自细节之锤 [ http://blog.WaterLin.org/ ]

Copyright © WaterLin.org. All rights reserved.

(1) Comment    Read More   
Posted on 29-11-2009
Filed Under (软件) by waterlin

Windows 下有 TortoiseSVN 这么可人的 SVN 客户端,Linux 虽然没有这样能带勾子的 SVN 客户端,但是用 RapidSVN 作为 Linux 下的客户端倒也是一个不错的选择。

原创文章,如转载请注明:转载自细节之锤 [ http://blog.WaterLin.org/ ]

Copyright © WaterLin.org. All rights reserved.

(1) Comment    Read More   
Posted on 29-11-2009
Filed Under (软件) by waterlin

试了好几个 Linux 下的 IDE 开发工具,依然觉得 Code::Blocks 最好用,但是默认配置下,Code::Blocks 的编辑器依然是白底黑字,不仅对眼睛很不利,还一点都不 Linux 化。

我们可以通过菜单 Settings -> Editor 来对编辑器的字体、颜色等进行手动配置。当然,更好的方法是导入别人已经配置好的配置文件,比如这个 Oblivion 的主题就蛮不错的,可以下载下来,通过命令行运行命令

$ cb_share_config

,就可以通过弹出的对话框,导入这个设置到 Code::Blocks 默认的配置文件 ~/.codeblocks/default.conf 里。

如果需要保存自己的设置,也只需要在命令终端运行 cbshareconfig 命令,然后在左边的 “Source configuration file” 里把 ~/.codeblocks/default.conf (即你自己的配置文件,如果你修改了默认配置,则可能不是这个配置文件了)选进去,选中你需要保存的模块,然后点击 Export 就可以保存、备份自己的设置。

有兴趣的朋友可以试试我自己的 Code::Blocks 编辑器设置

原创文章,如转载请注明:转载自细节之锤 [ http://blog.WaterLin.org/ ]

Copyright © WaterLin.org. All rights reserved.

(1) Comment    Read More