8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

最近实习需要用到编译一些静态库, 但是静态库编译相互依赖的库也是非常让人头大了, 这里我介绍一个还不错的小办法来解决这个问题.

首先, 用动态库编译.一般来说, 用动态库编译都比较简单, 实际上在动态库和静态库都存在的情况下, g++也是默认会先链接到动态库的, 所以我们正常编译得到一个可执行文件(或者动态库也行), 然后我们用ldd这个工具看一下这个库所依赖的动态库, 注意这个时候我们只需要找到那些动态库所在的路径就好, 假设是PATH吧.

然后, 我们开始使用静态库编译.这里还有几种链接静态库的方式, 参见我之前的博客, gcc链接静态库的几种方式, 这个时候我们一般会看到很多错误,当然你要是没有错误,那就恭喜了哈哈, 一般我们会遇到一些undefined reference to xxxx. 这个xxxx一般是一个函数名, 其实就是在链接的过程中没有找到这个函数的定义, 因为这个函数的定义可能在另外一个静态库里面, 而我们没有去链接到这个静态库, 这里我就要展示我的小技巧了, 我的小技巧是一个脚本.

使用脚本找到到底是哪个静态口包含了xxxx这个函数的定义先展示一下脚本的代码,其实也不复杂, 用到了nm这个工具

#!/bin/bash
if [ $# -lt 1 ]
then
echo "USAGE: $0 function_name"
exit 1
fi
for name in $(ls *.a)
do
res=$(nm -g --defined-only ${name} | grep $1)
if [ -n "$res" ]
then
echo ${name}
echo ${res}
fi
done

值得注意的是我们需要把这个脚本放到我们之前找到的PATH下面, 这个PATH一般都是一些系统文件存放的地方, 所以我们需要使用sudo命令来将脚本放进去, 再用sudo权限运行, 一般这个时候我们就能找到到底是哪个静态库包含xxxx这个函数的定义了, 我们只需要将这个静态库添加到我们编译时指定的包含路径就好, 需要注意的是可能需要加上-l选项, 比如静态库的名称是libpng.a, 我们就要在编译的时候加上-lpng选项, 否则编译器还是报undefined reference to xxxx哦.

写到这里就差不多结束了, 这里我们介绍的基本是专门针对要链接静态库的情况, 实际上我们平时可能也不太需要这样做, 这里我只是简单记录一下, 如果不用移植的话, 用动态库就更方便多了, 如果用动态库链接也失败的话, 基本就是编译少了选项, 或者动态库没找到了, 一般也用不到我这个办法(笑), 不过这里记录一下, 兴许以后自己还能用得着, 同时也熟悉了Linux下shell脚本的编写.