Xcode链接glib静态库异常:误链接动态库问题求助
直接指定静态库绝对路径
别只在「Link Binary with Libraries」里加.a文件,去Xcode的Build Settings->Other Linker Flags里直接写静态库的完整路径,比如/usr/local/Cellar/glib/2.78.4/lib/libglib-2.0.a(根据你brew实际安装路径调整)。这样链接器会优先用你指定的静态库,不会自动搜动态库。调整库搜索路径优先级
到Build Settings->Library Search Paths,把包含glib动态库的路径删掉,或者把静态库所在路径移到列表最顶端,确保它的搜索优先级最高。顺便检查Framework Search Paths里有没有相关路径,一并处理。补全所有静态依赖库
glib依赖其他库(比如libgobject、libgio),如果这些依赖是动态库,会间接拉进来glib的动态库。你可以跑glib-config --static --libs命令,把输出的所有静态库参数复制到Other Linker Flags里,确保整个依赖链都是静态链接。清理Xcode缓存
Xcode的缓存可能残留旧配置,导致问题反复:- 关闭Xcode
- 执行命令删除DerivedData:
rm -rf ~/Library/Developer/Xcode/DerivedData - 打开Xcode后按
Cmd+Shift+K清理项目,再按Cmd+Option+Shift+K清理构建文件夹
强制指定glib的静态链接方式
如果系统默认路径里的动态库优先级太高,在Other Linker Flags里加-Bstatic -lglib-2.0 -Bdynamic,这个参数会让链接器只对glib用静态链接,其他库保持动态,避免-static全局静态链接带来的问题。验证链接结果
编译完成后,用otool -L 你的可执行文件路径查看最终链接的库,如果输出里还有libglib-2.0.dylib,说明步骤没到位,回头检查配置。
内容的提问来源于stack exchange,提问作者copter

