macOS下使用自制libft_malloc.so编译C文件提示找不到库
问题原因
-l链接参数使用规则错误:gcc/clang的-l选项会自动为目标库名拼接lib前缀、以及对应系统的动态库/静态库后缀,你填写-lft_malloc.so时,链接器实际会查找名为libft_malloc.so.dylib、libft_malloc.so.a的文件,和你实际存在的libft_malloc.so名称不匹配。- macOS平台动态库规范差异:macOS原生动态库的默认后缀为
.dylib,而非Linux常用的.so,链接器默认查找动态库时会优先匹配.dylib后缀的文件。
解决方法
你可以任选以下任意一种方案处理:
直接修正编译参数
将-lft_malloc.so修改为-lft_malloc,即可让链接器匹配到你当前目录下的libft_malloc.so文件,修正后的编译命令为:gcc main.c -L. -lft_malloc -Iinclude
注意运行生成的可执行文件时,需要指定动态库查找路径,执行命令为:DYLD_LIBRARY_PATH=. ./a.out适配macOS平台动态库规范
将你生成的libft_malloc.so重命名为符合macOS规则的libft_malloc.dylib,之后使用下方命令编译即可:gcc main.c -L. -lft_malloc -Iinclude直接指定库路径编译
不需要使用-L和-l参数,直接将动态库的相对路径写入编译命令即可跳过链接器的自动查找规则:gcc main.c ./libft_malloc.so -Iinclude
内容的提问来源于stack exchange,提问作者Glitch
相关产品推荐
相关产品推荐

