当使用 QT Creator 中的“运行”按钮启动应用程序时,我必须使用 sftp 上传文件,它工作正常。
我发现当在其自己的应用程序上运行时返回错误 1,即 CURLE_UNSUPPORTED_PROTOCOL
使用 curl -V
检查我的 osx 上的 curl 显示默认 curl 没有列出 sftp。
然而,QT creator 以某种方式在使用支持 sftp 的 curl 的某些不同上下文中运行应用程序,因为它上传文件时没有错误。
所以问题是我如何使独立应用程序使用与从 QT Creator 运行时相同版本的 dylib?
最佳答案
选项 A) 更改库路径
- 使用
ps ax | grep <appname>
查找正在运行的应用程序 - 做
otool -L <full-path-of-app>
,这会给你dylib
您的应用解析为 - 更改
dylib
在你的二进制文件中使用 install_name_tool . Check this answer for more details指向dylib
由 QT Creator 使用。
选项 B) [un]/set RPATH
您的应用使用错误路径的另一个原因可能是 RPATH
在你的 dylib
.你可以查看RPATH
在你的 dylib 上使用 otool -l <full-path-of-your-app>
. RPATH 告诉您位置二进制文件将首先从中获取库,如果它在您的应用程序中设置,您可以取消设置 RPATH
由 QT 创建者设置。
检查 man page of dyld找出如何RPATH
工作。
例如检查RPATH
在 Xcode 应用程序上设置(您正在寻找 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 creator 通常使用其软件包附带的库,而在您的目标系统上通常不存在这些库。更好的做法是编译 curl
并随您的应用程序一起发送
关于c++ - 从 Qt Creator 运行的应用程序使用的库与其单独运行时不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46143358/