函数库是一些头文集( .h ) 文件和库文件( .so 或 .a ) 的集合。
Linux下大多函数默认将头文件放在 /usr/include/目录下,
库文件放在/usr/lib/目录下,
gcc采用搜索目录的办法来查找所需要的文件,
-I 选项可向gcc的头文件搜索路径中添加新的目录。如在/home/david/include/目录下有编译时所需要的头文件,为让gcc顺利找到它们,可:
gcc david.c -I /home/davide/include -o david
-L选项可向gcc的库文件搜索路径中添加新的目录。如在/home/david/lib/目录下有连接时所需要的库文件libdavid.so, 为让gcc顺利找到它们,可:
gcc david.c -L /home/david/lib -ldavid -o david
-l选项,指示gcc连接库文件david.so。 Linux下的库文件在命名时有一个约定,那就是应该以 lib 三个字母开头。 由于所有的库文件都遵循了同样的规范,因此在用-l选项指定连接的库文件时可以省去lib三个字母。也就是说
gcc 在对 -l david 进行处理时,会自动连接名为 libdavid.so 的文件。
Linux 库文件分为两大类: 动态链接库( .so ) 和静态链接库( .a )
两者的差别在于程序执行时所需的代码是在运行时动态加载的,还是在编译时静态加载的。
默认情况下,gcc在链接时优先使用动态链接库,只有在动态链接库不存在时才考虑使用静态链接库。
如果需要的话,可在编译时加上 -static 选项, 强制使用静态链接库。如:在/home/david/lib/目录下有链接时
所需要的库文件 libfoo.so 和 libfoo.a , 为让gcc在链接时只用到静态链接库,可使用命令:
gcc foo.c -L /home/davide/lib -static -lfoo -o david
------摘自 李玉波等, 《Linux C 编程》, 清华大学出版社
-------------------------------------------------------------------------------------
g++ myread.cpp -o myread -I /usr/local/include -L /usr/local/lib -lopencv_imgproc -lopencv_core -lopencv_highgui
For openCV 3.X you need to add library imgcodecs to project, you need to append "-lopencv_imgcodecs"