1.LIBRARY_PATH和LD_LIBRARY_PATH是Linux下的两个环境变量,二者的含义和作用分别如下:
LIBRARY_PATH环境变量用于在程序编译期间查找动态链接库时指定查找共享库的路径,例如,指定gcc编译需要用到的动态链接库的目录。设置方法如下(其中,LIBDIR1和LIBDIR2为两个库目录):
export LIBRARY_PATH=LIBDIR1:LIBDIR2:$LIBRARY_PATH
LD_LIBRARY_PATH环境变量用于在程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径,注意,LD_LIBRARY_PATH中指定的路径会在系统默认路径之前进行查找。设置方法如下(其中,LIBDIR1和LIBDIR2为两个库目录):
export LD_LIBRARY_PATH=LIBDIR1:LIBDIR2:$LD_LIBRARY_PATH
例如:将一个环形队列变成动态库并使用的方法(见学习Cmake的t3_shareLib例子):
(1).执行在build下执行cmake .. 或者 cmake -DCMAKE_INSTALL_PREFIX=/tmp/t3/usr .. 会在build/lib下生成libRingQueue.so ;
(2).将工程目录下lib/RingQueue.h和build/lib下生成libRingQueue.so复制到useLib下 ;
(3).在useLib下执行g++ -std=c++11 -o main main.cpp -L. -lRingQueue 生成main ;
(4).注意-L.表示库文件路径在当前路径下,-lRingQueue指定连接的库名,不用带前缀lib和后缀.so ,也可以-Wl,rpath=<lib_dir> 指定运行期共享库的路径;
(5).添加库的连接路径: export LD_LIBRARY_PATH=./ ,然后./main执行。
(6).GCC的-Wl作用: 通过指定 -Wl,--as-needed 选项,链接过程中,链接器会检查所有的依赖库,没有实际被引用的库,不再写入可执行文件头。
(7).-Wall选项意思是编译后显示所有警告。
(8).-W选项类似-Wall,会显示警告,但是只显示编译器认为会出现错误的警告。在编译一些项目的时候可以-W和-Wall选项一起使用.
2.区域锁: #define MUTEX(a) boost::mutex::scoped_lock lock(a);
3.用prctl给线程命名: 用prctl给进程内其它线程命名的接口prctl(PR_SET_NAME, (unsigned long)"testTheread"); 命名为testTheread;