Я использую Worklight для гибридного приложения. Чтобы расширить возможности iOS, я пытаюсь добавить статическую библиотеку. В результате у меня возникла ошибка от Линкера о столкновениях символов newLib
с libWorklightStaticLibProject
,
Я попытался добавить заголовочный файл с переопределением имени метода, прежде чем включать библиотеку в проект:
Например, для метода _OBJC_CLASS_$_KeychainItemWrapper
я добавил
#define _OBJC_CLASS_$_KeychainItemWrapper PREFIX_OBJC_CLASS_$_KeychainItemWrapper
#include "newLib/header.h"#undef _OBJC_CLASS_$_KeychainItemWrapper
Я также пытался изменить символы файла .o, но не смог объединить отредактированные файлы .o в одну статическую библиотеку.
Часть Linkers ошибка.
...
duplicate symbol _OBJC_CLASS_$_KeychainItemWrapper in:
[project_folder]/iphone/native/Classes/newLib.framework/newLib(KeychainItemWrapper.o)
[project_folder]/iphone/native/WorklightSDK/libWorklightStaticLibProject.a(KeychainItemWrapper.o)
duplicate symbol _OBJC_IVAR_$_KeychainItemWrapper.genericPasswordQuery in:
[project_folder]/iphone/native/Classes/newLib.framework/newLib(KeychainItemWrapper.o)
[project_folder]/iphone/native/WorklightSDK/libWorklightStaticLibProject.a(KeychainItemWrapper.o)
duplicate symbol _OBJC_IVAR_$_KeychainItemWrapper.keychainItemData in:
[project_folder]/iphone/native/Classes/newLib.framework/newLib(KeychainItemWrapper.o)
[project_folder]/iphone/native/WorklightSDK/libWorklightStaticLibProject.a(KeychainItemWrapper.o)
duplicate symbol _OBJC_METACLASS_$_KeychainItemWrapper in:
[project_folder]/iphone/native/Classes/newLib.framework/newLib(KeychainItemWrapper.o)
[project_folder]/iphone/native/WorklightSDK/libWorklightStaticLibProject.a(KeychainItemWrapper.o)
duplicate symbol _OBJC_CLASS_$_Reader in:
[project_folder]/iphone/native/Classes/newLib.framework/newLib(Reader.o)
[project_folder]/iphone/native/WorklightSDK/libWorklightStaticLibProject.a(Reader.o)
...
Пожалуйста, помогите мне решить проблему. Как я могу использовать сторонние библиотеки с такими же зависимостями, как библиотеки Worklight?
Действительно, некоторые из этих символов находятся внутри libWorklightStaticLib.a и sqlcipher.framework. Что хорошо. Проблема в том, что эта библиотека пытается добавить и их.
Несколько вещей, чтобы попробовать:
использование -all_load
а также -force_load
:
добавлять -all_load
на вызов компоновщика. Флаг компоновщика скажет компоновщику загрузить все объектные файлы всех архивов независимо от того, используется какой-либо символ или нет.
добавлять -force_load
на вызов компоновщика, включая путь к архиву. Этот флаг работает точно так же, как -all_load, но только для указанного архива. Вы можете прочитать больше об этом здесь: https://stackoverflow.com/a/22264650/186909
Есть также учебные пособия по удалению повторяющихся символов, например: