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 文件。

  1. 将所有的dll或者so文件copy到exe文件所在目录下,注意:运行时的工作目录不在这个文件下也是会出错的,如/root/<dst to path>/*.exe ,会报找不到.so文件或者dll文件。
  2. 将dll或者so文件copy到系统目录中,c:windowssystem* 或者 /usr/lib 等。
  3. windows下添加环境变量,linux 添加LD_LIBRARY_PATH,方法与LIBRARY_PATH 相似, 也可以添加到/etc/profile 里, 参考 这里
原文地址:https://www.cnblogs.com/walter-xh/p/10596124.html