2016-02-18 10 views
8

Wir haben ein großes Projekt mit mehreren Apps. Daher haben wir den gemeinsamen Code in ein einzelnes dynamisches Framework verschoben. Bisher läuft fein auf 64-Bit-Geräte, aber einen Absturz auf 32-Bit-Geräte wie folgt mit:Xcode 7.2 Dynamic Framework 32-Bit-Gerätefehler

dyld: REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB has segment 0 which is not a writable segment (__TEXT) in 
/path/to/MyApp.app/Frameworks/MyFramework.framework/MyFramework 

Ein wenig Hintergrund: Wir haben ffmpeg und einige andere Fett-Libs zusammengestellt gegen ARM64, ARMv7 und x86_64 Architekturen dann zum Rahmen hinzugefügt. Wir hatten einige Textverschiebungsfehler, die durch Hinzufügen von -read_only_relocs suppress zum Linker-Flag behoben wurden.

Wenn wir die ffmpeg und verwandte Bibliotheken entfernen, funktioniert es gut auf 32-Bit-Geräten.

Ist jemand auf einen solchen Fehler gestoßen? Jeder Zeiger oder jede Hilfe würde sehr geschätzt werden.

Antwort

0

Wir hatten das gleiche Problem, wenn Sie "Dynamic Library" für den Mach-O-Typ in Ihrem Framework verwenden. Der Wechsel zu "Relocatable Object File" behob das Problem. Das Problem scheint bei der Verlagerung von Text innerhalb der Bibliotheken zu liegen.

Wie here in mehr Details beschrieben. „A Text Verlagerung ist das Ergebnis einer Referenz auf ein Objekt mit einer variablen Adresse während der Laufzeit eines absoluten Adressierungsmodus mit der Anweisung selbst codiert, die Adresse enthält, und daher den ausführbaren Wortlaut die Binärdatei muss so geändert werden, dass sie die korrekte Adresse enthält, wenn die tatsächlichen Ladeadressen zur Laufzeit berücksichtigt werden. "

FFMPEG Verwendung Text Verlagerungen und es hat ein großes Problem auf Android M gewesen (https://trac.ffmpeg.org/ticket/4928)

Da sie würde nicht so bald behoben werden, „Verschiebbare Object File“ scheint die einzige Möglichkeit zu sein.

Verwandte Themen