Библиотека для создания привязок Gomobile с "PIE disabled" / i386 arch - PullRequest
0 голосов
/ 25 апреля 2018

Я использовал инструмент gomobile bind для создания библиотеки Go для использования в приложении для iOS.Я завернул свою библиотеку в Cocoapods .podspec.Это хорошо работает в симуляторе (через локальный модуль разработки), но когда я пытаюсь сделать pod lib lint (часть шага, часть выпуска cocoapod), я сталкиваюсь с ошибками:

Ошибка:

 ld: illegal text-relocation to 'runtime.rodata' in /Users/matti/src/foobar-sdk-ios/Frameworks/Client.framework/Client(go.o) from 'sync/atomic.(*Value).Store' in /Users/matti/src/foobar-sdk-ios/Frameworks/Client.framework/Client(go.o) for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Предупреждение:

- NOTE  | [iOS] [FooBarSDK/Go] xcodebuild:  ld: warning: PIE disabled. Absolute addressing (perhaps -mdynamic-no-pic) not allowed in code signed PIE, but used in sync/atomic.(*Value).Store from /Users/matti/src/foobar-sdk-ios/Frameworks/Client.framework/Client(go.o). To fix this warning, don't compile with -mdynamic-no-pic or link with -Wl,-no_pie

Кажется, что это ссылка для других архитектур.Я не мог понять, как пропустить i386 - хотя я переопределяю VALID_ARCHS - и я думаю, что в любом случае это не будет правильным решением.

Так что вместо этого я хотел бы узнать, как создать правильный двоичный файл из моего кода Go - я попытался указать -ldflags = "- extldflags = -pie" для команды gomobile bind, но я предполагаю, что это болеевопроса компиляции.Я знаю, что -buildmode = pie доступен для go build, но только для основных пакетов, а также не для gomobile bind.

1 Ответ

0 голосов
/ 26 апреля 2018

Видимо, это исправляет (подавляет) ошибку:

spec.pod_target_xcconfig = {
    "OTHER_LDFLAGS[arch=i386]" => "-Wl,-read_only_relocs,suppress"
}

Я все еще получаю предупреждение PIE, но ошибка исчезла, и модуль помещен в хранилище, нормально.

Интересно, будет ли у Apple говядина с отсутствующим двоичным пирогом при отправке в App Store?

...