c – OSX动态链接优先级之间的冲突?
OSX上的不同libjpeg动态库之间存在动态链接冲突.首先有一个标准的本机libJPEG.dylib(在/System/Library/Frameworks/
ImageIO.framework/Versions/A/Resources/中).但是如果您使用MacPorts,也可以在/ opt / local / lib中使用与port相关的libjpeg.dylib.后者可能例如已被安装为一些其他端口的依赖.
当您链接到系统libJPEG(这是首选)时,会出现此问题. dyld: Symbol not found: __cg_jpeg_resync_to_restart Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO Expected in: /opt/local/lib/libJPEG.dylib in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO Trace/BPT trap: 5 所以我有两个问题(可能相关): >什么是解决实际问题的好方法(从DYLD_LIBRARY_PATH删除/ opt / local / lib显然解决了它,但为其他依赖关系创建问题)? 解决方法
您不应该使用DYLD_LIBRARY_PATH设置库路径.正如你所发现的那样,这种情况往往会爆炸.可执行文件和库在链接时应该具有其库要求.使用otool -L来查找文件正在寻找的内容:
$otool -L /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO (compatibility version 1.0.0,current version 1.0.0) ... /usr/lib/libSystem.B.dylib (compatibility version 1.0.0,current version 1197.1.1) 例如我的一个自制程序: $otool -L /usr/local/bin/gifcolor /usr/local/bin/gifcolor: /usr/local/Cellar/giflib/4.1.6/lib/libgif.4.dylib (compatibility version 6.0.0,current version 6.6.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0,current version 159.1.0) 请注意,它引用/usr/local.如果你已经建立了它,引用错误的库,我建议重建并将其指向正确的库. 如果这是不可能的,可以使用install_name_tool编辑使用哪个路径,但是有些情况下这种情况不起作用,例如,如果新路径长于旧路径,并且没有将其与-header_pad_max_install_names链接.使用正确的路径重建是首选. 请注意,有一些“特殊”路径可用于允许相对于其加载程序找到库.请参阅dyld(1)手册页中的@ executable_path /及其亲属. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |