C/C++ 开发中使用第三方库常见问题总结
本篇包含linux 与 windows 下动态编译问题,不涉及静态编译问题。
c++/c 编程中通常会经历:编译,链接和运行。
编译:
*.cpp/*.c --> .o //源文件生成obj文件
除了语法错误以外,包含相应的头文件即可编译通过。
#windows: visual studio 项目-->属性--> VC++目录-->包含目录-->添加相应的目录 #linux g++ ... -Ipath1 -Ipath2 ...
当然,系统可以配置一些默认包含目录。
链接:
将obj文件链接起来,并链接一些其他库中的obj文件。
windows 下的连接文件:*.lib
linux 下的链接文件:*.so (shared object)。被称之为共享函数库,在链接和程序运行时都需要用到。
1 windows visual studio
1 项目-->属性-->VC++目录-->库目录-->添加相应的目录
2 项目-->属性-->链接器-->输入-->附加依赖项-->添加相应库的文件名字
2 linux g++/gcc
-L LIB_PATH -l<libname> #libname 是*.so 文件去掉前缀lib和.so的名字
linux 下默认链接库路径:
LIBRARY_PATH #注意和LD_LIBRARY_PATH的区别,LIBRARY_PATH是在编译时需要的, #LD_LIBRARY_PATH是在运行时需要的。 #添加方法三种: 1、当前shell有效: export $LIBRARY_PATH:<your path> 2、当前用户有效: 将上面一局写入 ~/.bashrc; source ~/.bashrc #激活
运行:
基本思想:exe文件要能找到相应的 dll 文件或者 .so 文件。
- 将所有的dll或者so文件copy到exe文件所在目录下,注意:运行时的工作目录不在这个文件下也是会出错的,如/root/<dst to path>/*.exe ,会报找不到.so文件或者dll文件。
- 将dll或者so文件copy到系统目录中,c:\windows\system* 或者 /usr/lib 等。
- windows下添加环境变量,linux 添加LD_LIBRARY_PATH,方法与LIBRARY_PATH 相似, 也可以添加到/etc/profile 里, 参考 这里。