2017-09-10 11 views
0

QT Creatorからアプリケーションを起動するときにsftpを使用してファイルをアップロードする必要があります。私が見つけた何 Qt Creatorから実行されたアプリケーションは、独自のライブラリとは別のライブラリを使用します。

は、独自のアプリケーションで実行した場合 curl -Vと私のOSXでカールをチェック CURLE_UNSUPPORTED_PROTOCOL

にあるデフォルトのカールがSFTPをリストしていないことを示すエラー1を返すことです。

しかし何とかQT作成者は、エラーなしでファイルをアップロードするので、sftpをサポートするcurlを使用するいくつかの異なるコンテキストでappを実行します。

QT Creatorから実行したときと同じスタンドアロンアプリケーションが同じバージョンのdylibを使用するようにするにはどうすればよいですか?

答えて

1

OPTION A)ps ax | grep <appname>

  • otool -L <full-path-of-app>を行いますを使用して、実行中のアプリケーションを探す

    • libにパスを変更し、これはあなたにdylibあなたのアプリを提供しますが変更
    • に使用してバイナリでdylibを解決しますinstall_name_tool。 QT作成者が使用するdylibを指すCheck this answer for more details

    オプションB)[UN]は/あなたのアプリが不正なパスを使用しているもう一つの理由は、あなたのdylibRPATH可能性がありRPATH

    を設定します。 otool -l <full-path-of-your-app>を使用してdylibのRPATHを確認することができます。 RPATHはバイナリが最初にライブラリを取得する場所を示し、アプリケーションに設定されている場合はQT作成者が設定したRPATHを設定解除することができます。

    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の作成者は、典型的には、そのパッケージに同梱ライブラリを使用して、ターゲットシステム上でこれらは一般的に存在しません。もっと良いことはcurlをコンパイルしてあなたのアプリケーションに同梱します

  • +0

    Qtの作成者によって検査されたアプリケーションがまったく同じであったため、アプリアイコンをクリックして実行していたため、実際にはなぜこのように動作していたのか分かりません。しかし、otoolとinstall_name_toolを指し示すだけで十分だったので、私が提供できるアプリにカールをハックすることができました。私がカールとその依存関係を静的に構築しなければならないので、静的にビルドすると機能しませんでした。 – Mateusz

    +0

    @マテウス私は、あなたのケースであると思われるものから答えを更新しました。 – PnotNP

    関連する問題