Перейти к содержанию
Fire Monkey от А до Я
  • 0

Статическое и динамическое подключение библиотек


Gor777

Вопрос

Вопрос в следующем :

Как статически подключить динамическую библиотеку директивой "external" ?

При компиляции проекта Delphi для Win32 или Win64  все нормально.

При компиляции C++ проекта для Android в проект добавляю mylib.a и тоже все нормально.

При компиляции проекта Delphi для Android на этапе линковки - не работает. Пишет unresolved external  и тд.

Может в настройках проекта надо еще что то указать ?

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Отвечу  сам себе. Путь к библиотеке mylib.so должен быть прописан в Options->LibraryPath для платформы Android.

Только теперь беда № 2.

Приложение компилируется, только при упоминании внешней библиотеки не запускается. Продолжаю копать....

Ссылка на комментарий
  • 0

Проекта еще как такового нет.

Есть проблема статической загрузки динамической библиотеки на Delphi

 

Объявление внешней функции:

procedure DoSomething; external 'MYLIB.SO';

 

вызывает падение приложения при старте.

Тот же самый механизм в CBuilder при добавлении в проект MYLIB.A  работает корректно.

 

Продолжаю копать, лопата уже раскалилась... :)

Ссылка на комментарий
  • 0

Судя по всему 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

Коллеги, подскажите,

получается можно работать с .so библиотеками как с обычными dll в Delphi?

То есть я включаю библиотеку в поставку своего Android приложения и работаю с ней как обычной DLL?

Вывод такой я сделал по примеру выше.

Ссылка на комментарий
  • 0
  • Модераторы
52 минуты назад, bigjorj сказал:

Коллеги, подскажите,

получается можно работать с .so библиотеками как с обычными dll в Delphi?

То есть я включаю библиотеку в поставку своего Android приложения и работаю с ней как обычной DLL?

Вывод такой я сделал по примеру выше.

да все верно, вот тот же пример с басс библиотекой.

 

Ссылка на комментарий
  • 0
В 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?

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...