2017-09-10 3 views
0

Ich muss SFTP verwenden, um Dateien hochzuladen, wenn die Anwendung mit Run-Taste von QT Creator gestartet wird, funktioniert es gut.App von Qt Creator verwendet andere Bibliothek als wenn sie selbst ausgeführt

Was ich fand, ist, dass, wenn 1 auf seine eigene Anwendung gibt Fehler laufen, die mit curl -V

Überprüfung curl auf meinem osx CURLE_UNSUPPORTED_PROTOCOL ist zeigt, dass Standard-curl nicht SFTP auflistet.

Allerdings irgendwie QT Schöpfer App in einem anderen Kontext, der curl, die Unterstützung für sftp hat, weil es Dateien ohne Fehler hochlädt.

Also Frage ist, wie mache ich es so eigenständige Anwendung verwendet die gleiche Version von Dylib als wenn von QT Creator lief?

Antwort

1

OPTION A) ändern lib Pfad

  • die Anwendung von ps ax | grep <appname>
  • otool -L <full-path-of-app> Sie mit Laufen finden, dies wird Ihnen dylib Ihre App löst zu
  • Ändern der dylib in die Binärdatei mit install_name_tool. Check this answer for more details auf dylib zeigen, die von QT Creator verwendet wird.

OPTION B) [un]/set RPATH

Ein weiterer Grund, Ihre App falschen Pfad verwendet RPATH auf Ihrem dylib sein könnte. Sie können RPATH auf Ihrer Dylib mit otool -l <full-path-of-your-app> überprüfen. RPATH teilt Ihnen mit, dass die Lokalisierungs-Binärdatei zuerst Bibliotheken abruft. Wenn es in Ihrer Anwendung gesetzt ist, können Sie RPATH vom QT-Ersteller setzen.

Überprüfen Sie man page of dyld um herauszufinden, wie funktioniert RPATH arbeiten.

Zum Beispiel überprüfen Sie RPATH auf Xcode App (Sie suchen nach LC_RPATH Feld in Dylib Abschnitt).

$ 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) 

Um ungesetzt RPATH Verwendung install_name_tool -delete_rpath <RPATH-from-otool-l-output>

Qt Creator verwendet in der Regel Bibliotheken mit seinem Paket versandt und auf dem Zielsystem diese sind in der Regel nicht vorhanden. Bessere Sache zu tun wäre kompilieren curl und Versand mit Ihrer Anwendung

+0

Eigentlich immer noch nicht wissen, warum es sich so verhielt, denn wenn inspizierte Anwendung von Qt Creator lief genau das gleiche war ich durch Klicken auf App-Symbol ausgeführt. Aber das Zeigen auf otool und install_name_tool war genug Hilfe, so dass ich in der Lage war, curl in die App zu hacken, die ich liefern konnte. Statisch funktioniert das nicht, da ich Curl und seine Abhängigkeiten statisch aufbauen müsste. – Mateusz

+0

@Mateusz Ich aktualisierte die Antwort von dem, was ich für Ihren Fall vermute. – PnotNP