编译选项 -l 库名(小写的L没有lib前缀,没有so后缀) -L库的路径(不包括文件名) -I(大写的i头文件路径)
多数的第三方都库支持64位但是不支持32位环境,我装的pcre2-posix的库也可以在32位环境编译,但是运行是会报段错误。
程序链接时调用的动态库不一定就是头文件所对应的。
比如我在源文件里只包含了regex.h头文件,没有包含pcre2-posix的头文件(这两个库的函数调用是一样的,也就是说这两库的接口兼容),但是在makefile里添加编译选项 -lpcre2-posix 和 -L<pcre2-posix的路径> 那么程序运行时还是会找pcre2-posix 的动态库.
也就是说,编译 和链接是两个完全不相关的步骤。两者都要精确说明依赖关系。否则就按照系统默认走