在GCC编译命令中添加链接路径后libcurl编译失败的原因排查
解决libcurl与cJSON共存时的编译链接错误
问题原因
GCC链接器的参数顺序直接影响符号查找逻辑:所有-lxxx库参数必须放在源文件/目标文件之后。当你把-lcurl、-lcjson放在main.c前面时,链接器处理库文件时还未解析到源文件里的函数引用,会直接跳过这些库,最终导致"未引用函数"的错误。
正确编译命令
#!/usr/bin/env bash gcc main.c -I/home/arch/coding/vcpkg/installed/x64-linux/include \ -L/home/arch/coding/vcpkg/installed/x64-linux/lib \ -lcurl -lcjson -o gitgetn
参数顺序说明
- 先指定源文件
main.c,让编译器先分析出代码中需要的所有函数符号 - 再通过
-I指定头文件搜索路径,-L指定cJSON的库文件路径 - 最后列出依赖的库
-lcurl和-lcjson,链接器会根据前面解析出的符号需求,从对应库中匹配实现
注:如果libcurl是系统默认路径下的库,-L参数不会干扰其查找,链接器会自动优先搜索系统标准库路径。
内容的提问来源于stack exchange,提问作者Toost
相关产品推荐
相关产品推荐

