我必须使用sftp在使用QT Creator的“运行”按钮启动应用程序时上传文件,它可以正常工作。
我发现当在自己的应用程序上运行时返回错误1 CURLE_UNSUPPORTED_PROTOCOL
使用curl -V
检查我的osx上的curl,显示默认curl没有列出sftp。
然而,不知何故QT创建者在某些不同的上下文中运行应用程序,该上下文使用支持sftp的curl,因为它上传文件时没有错误。
所以问题是如何制作它让独立应用程序使用与从QT Creator运行时相同版本的dylib?
答案 0 :(得分:2)
选项A)更改lib路径
ps ax | grep <appname>
otool -L <full-path-of-app>
,这样您的应用就会dylib
解析为dylib
。 Check this answer for more details指向QT创建者使用的dylib
。 选项B)[联合国] /设置RPATH
您的应用使用错误路径的另一个原因可能是RPATH
上的dylib
。您可以使用RPATH
检查dylib上的otool -l <full-path-of-your-app>
。 RPATH告诉您二进制文件首先从中获取库,如果在您的应用程序中设置了它,您可以取消设置QT创建者设置的RPATH
。
检查man page of dyld,了解RPATH
的工作原理。
例如,检查在Xcode应用上设置的RPATH
(您正在dylib部分中查找LC_RPATH
字段)。
$ otool -l /Applications/Xcode.app/Contents/MacOS/Xcode
Load command 22
cmd LC_RPATH
cmdsize 48
path @executable_path/../Frameworks (offset 12)
Load command 23
cmd LC_RPATH
cmdsize 56
path @executable_path/../SharedFrameworks (offset 12)
Load command 24
cmd LC_RPATH
cmdsize 40
path @executable_path/../PlugIns (offset 12)
取消设置RPATH
使用install_name_tool -delete_rpath <RPATH-from-otool-l-output>
QT创建者通常使用随其软件包一起提供的库,而在目标系统上,这些库通常不存在。更好的做法是编译curl
并随应用程序一起提供