Название: dylib (dll) - туда и обратно Отправлено: Igors от Январь 03, 2015, 10:35 Добрый день
Вопрос типа "забыл - ну или никогда не знал :)". Есть часть кода привязанная к старому SDK которую я не могу быстро портировать на новый. Я хочу свалить эту часть в dylib и спокойно делать остальное на новом. Но тут вылазит такое, пример Код Да, я хочу поместить класс MyOldClass в dylib, но класс MyString должен быть в основном приложении. Ну а dylib конечно не собирается, линкер вякает на MyString. Шо делать? Ну и вообще неясно, а пройдет ли так (подхватится ли dylib) если SDK разные? Спасибо Название: Re: dylib (dll) - туда и обратно Отправлено: Igors от Январь 05, 2015, 11:39 Как ни странно, такое свинство работает на OSX (наверное на др nix ОС тоже)
1) Ставим либе опцию линковки Цитировать -undefined dynamic_lookup После этого она прекрасно "собирается" всегда :)2) Линкуем ее к приложению (weak необязательно) и запускаем. Лоадер выдает ошибку типа Цитировать dyld: Symbol not found: __ZN8MyStringShowEv Теперь именно этот символ (__ZN8MyStringShowEv) вписываем в exp файл приложения. Следующий символ - и так до тех пор пока не запустится. При этом класс MyString должен иметь атрибут visibility("default"), иначе линкер не будет его экспортировать.Referenced from: /Volumes/../MyLib.dylib Expected in: flat namespace Конечно плохо что приходится добавлять много символов руками и корректировать если что-то изменилось в приложении. Но радует что не нужна переделка исходников. Как лучше - хз. Поизучал Q_DECL_IMPORT/Q_DECL_EXPORT, они на OSX сводятся к тому же Цитировать __attribute__((visibility("default"))) Наверное (я так думаю) для dylib если эта видимость установлена - то автоматом экспорт. Но для application это не так.В общем, "так защищаться можно" :) |