我必须使用sftp使用qt Creator的运行按钮上传文件上传文件。
我发现在自己的应用程序上运行时返回错误1时, curle_unsupported_protocol
用curl -V
检查我的OSX上的卷曲
但是,QT Creator以某种不同的上下文运行应用程序,该上下文使用了支持SFTP的curl,因为它在没有错误的情况下上传了文件。
所以问题是我如何使其独立应用程序使用与QT Creator跑步时相同的版本的Dylib?
选项a)更改lib路径
- 通过使用
ps ax | grep <appname>
找到运行的应用程序 - 做
otool -L <full-path-of-app>
,这将为您提供dylib
您的应用程序解决 - 使用install_name_tool更改二进制中的
dylib
。检查此答案以获取更多详细信息,以指向QT Creator使用的dylib
。
选项b)[un]/set RPATH
您的应用程序使用错误路径的另一个原因可能是dylib
上的RPATH
。您可以使用otool -l <full-path-of-your-app>
在Dylib上检查RPATH
。rpath告诉您位置二进制文件将首先从库中获取库,如果它在您的应用程序中设置了,则可以取消QT Creator设置的RPATH
。
检查染色体的人页面以找出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
,并与您的应用程序一起运送