从QT创建者运行的应用程序使用与单独运行时不同的库



我必须使用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,并与您的应用程序一起运送

相关内容

最新更新