Перейти к содержанию
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 пользователей онлайн

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