Gor777 Опубликовано 29 сентября, 2014 Поделиться Опубликовано 29 сентября, 2014 Вопрос в следующем : Как статически подключить динамическую библиотеку директивой "external" ? При компиляции проекта Delphi для Win32 или Win64 все нормально. При компиляции C++ проекта для Android в проект добавляю mylib.a и тоже все нормально. При компиляции проекта Delphi для Android на этапе линковки - не работает. Пишет unresolved external и тд. Может в настройках проекта надо еще что то указать ? Цитата Ссылка на комментарий
0 Gor777 Опубликовано 30 сентября, 2014 Автор Поделиться Опубликовано 30 сентября, 2014 Отвечу сам себе. Путь к библиотеке mylib.so должен быть прописан в Options->LibraryPath для платформы Android. Только теперь беда № 2. Приложение компилируется, только при упоминании внешней библиотеки не запускается. Продолжаю копать.... Brovin Yaroslav 1 Цитата Ссылка на комментарий
0 Администраторы Brovin Yaroslav Опубликовано 30 сентября, 2014 Администраторы Поделиться Опубликовано 30 сентября, 2014 Если вы выложите тестовый проект с библиотекой, то вам быстрее помогут. Цитата Ссылка на комментарий
0 Gor777 Опубликовано 1 октября, 2014 Автор Поделиться Опубликовано 1 октября, 2014 Проекта еще как такового нет. Есть проблема статической загрузки динамической библиотеки на Delphi Объявление внешней функции: procedure DoSomething; external 'MYLIB.SO'; вызывает падение приложения при старте. Тот же самый механизм в CBuilder при добавлении в проект MYLIB.A работает корректно. Продолжаю копать, лопата уже раскалилась... Цитата Ссылка на комментарий
0 Gor777 Опубликовано 1 октября, 2014 Автор Поделиться Опубликовано 1 октября, 2014 Судя по всему XE6 и XE7 не поддерживают статическую загрузку библиотек. Работает только динамическая загрузка Пример из BASS работоспособен и проверен DocDir := IncludeTrailingPathDelimiter(System.IOUtils.TPath.GetLibraryPath); //* BASS BASSLibraryHandle := LoadLibrary(PChar(DocDir + 'libbass.so')); if BASSLibraryHandle = 0 then begin ShowMessage( 'libbass.so load FAIL'); end; if BASSLibraryHandle <> 0 then begin @BASS_Init := GetProcAddress(BASSLibraryHandle, ('BASS_Init')); @BASS_StreamCreateFile := GetProcAddress(BASSLibraryHandle, ('BASS_StreamCreateFile')); @BASS_ChannelPlay := GetProcAddress(BASSLibraryHandle, ('BASS_ChannelPlay')); @BASS_FXGetParameters := GetProcAddress(BASSLibraryHandle, ('BASS_FXGetParameters')); Result := True; end; Хотя в хелпе этот способ заявлен как Dynamic Loading (Windows-only) .... Цитата Ссылка на комментарий
0 bigjorj Опубликовано 23 июня, 2017 Поделиться Опубликовано 23 июня, 2017 Коллеги, подскажите, получается можно работать с .so библиотеками как с обычными dll в Delphi? То есть я включаю библиотеку в поставку своего Android приложения и работаю с ней как обычной DLL? Вывод такой я сделал по примеру выше. Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 23 июня, 2017 Модераторы Поделиться Опубликовано 23 июня, 2017 52 минуты назад, bigjorj сказал: Коллеги, подскажите, получается можно работать с .so библиотеками как с обычными dll в Delphi? То есть я включаю библиотеку в поставку своего Android приложения и работаю с ней как обычной DLL? Вывод такой я сделал по примеру выше. да все верно, вот тот же пример с басс библиотекой. Цитата Ссылка на комментарий
0 KazakOFF Опубликовано 26 июля, 2022 Поделиться Опубликовано 26 июля, 2022 В 01.10.2014 в 12:01, Gor777 сказал: Судя по всему XE6 и XE7 не поддерживают статическую загрузку библиотек. Работает только динамическая загрузка Пример из BASS работоспособен и проверен DocDir := IncludeTrailingPathDelimiter(System.IOUtils.TPath.GetLibraryPath); //* BASS BASSLibraryHandle := LoadLibrary(PChar(DocDir + 'libbass.so')); if BASSLibraryHandle = 0 then begin ShowMessage( 'libbass.so load FAIL'); end; if BASSLibraryHandle <> 0 then begin @BASS_Init := GetProcAddress(BASSLibraryHandle, ('BASS_Init')); @BASS_StreamCreateFile := GetProcAddress(BASSLibraryHandle, ('BASS_StreamCreateFile')); @BASS_ChannelPlay := GetProcAddress(BASSLibraryHandle, ('BASS_ChannelPlay')); @BASS_FXGetParameters := GetProcAddress(BASSLibraryHandle, ('BASS_FXGetParameters')); Result := True; end; Хотя в хелпе этот способ заявлен как Dynamic Loading (Windows-only) .... Какой нужно указывать Remote patch в Deployment? Цитата Ссылка на комментарий
Вопрос
Gor777
Вопрос в следующем :
Как статически подключить динамическую библиотеку директивой "external" ?
При компиляции проекта Delphi для Win32 или Win64 все нормально.
При компиляции C++ проекта для Android в проект добавляю mylib.a и тоже все нормально.
При компиляции проекта Delphi для Android на этапе линковки - не работает. Пишет unresolved external и тд.
Может в настройках проекта надо еще что то указать ?
Ссылка на комментарий
7 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.