FreeBasic
Главная
Вход
Регистрация
Воскресенье, 18.11.2018, 22:36Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Freebasic » Обзор статей с сайта http://users.freebasic-portal.de/freebasicru/ » Пользовательские библиотеки (Все о написании и компиляции *.dll и *.a)
Пользовательские библиотеки
RoloverДата: Воскресенье, 14.07.2013, 13:34 | Сообщение # 1
Лейтенант
Группа: Пользователи
Сообщений: 45
Репутация: 0
Статус: Offline

Здравствуйте и у меня очередной вопрос
Читаю Ваш учебник, где описывается создание библиотек,  динамических и статических... Просто замечательно ))))!!!!
Но, возникли некоторые вопросы

И так
Компиляция динамической библиотекиl
команда
fbc -s console -dll  -export d.bas

Получилось 2 файла

d.dll и libd.dll.a

Вопрос
: какой из этих файлов  лишний??

Компиляция статической библиотеки
Команда fbc - lib d.bas

Получаем файл как Вы и предупреждали
libd.a

Функция библиотеки или файл d.bas который мы компилируем как библиотеку он содержит всего одну функцию (это было описание для тех кто не знает) smile
Код
Function Dfgh Alias "Dfgh" () As Integer Export    
      Return 25    
    End Function

Библиотека как динамическая работает через подключение

Код
'определяем идентификатор библиотеки в памяти
Dim MemDll as Any Pointer

'определяем указатель на функцию
Dim func As Function() as Integer

'Загружаем библиотеку в память и получаем идентификатор
MemDll = DyLibLoad("d.dll")

'если не загрузилась останавливаем
If MemDLL = 0 Then    
'тут можно что-нибудь вывести
     End
End If

'получаем указатель на функцию в памяти
'указываем Идентификатор библиотеки в памяти и имя функции в библиотеке
func = DylibSymbol (MemDll, "Dfgh")

'если не получили останавливаем
If func = 0 Then
'тут можно что-нибудь вывести
     End
End IF

'и дальше запускаем функцию как указатель
'и через него же передаём параметры если требуется
? func()

'выгружаем библиотеку указывая идентификатор
Dylibfree MemDll

' замираем на 2,5 секунды
Sleep (2500)

а вот как статическая не хочет

я не могу запустить вот этот кусок кода
Код
#inclib "d"
Declare Function Dfgh() as Integer
Print Dfgh()
sleep (2500)


выдаёт такую ошибку  cannot find -ld
работаю в BFIde


Объяснив другому, поймешь, что понял сам.

Сообщение отредактировал Rolover - Воскресенье, 14.07.2013, 13:36
 
haavДата: Воскресенье, 14.07.2013, 14:31 | Сообщение # 2
Генерал-полковник
Группа: Администраторы
Сообщений: 856
Репутация: 34
Статус: Offline
Цитата (Rolover)
Получилось 2 файла

d.dll и libd.dll.a


d.dll - это и есть сама библиотека.
libd.dll.a - типа связующего звена. В нее записывается служебная информация о библиотеке d.dll Для вас лично на текущем компе данная либа уже не нужна. Возможно она понадобится для более удобного подключения dll на другом языке программирования. Больше об этом сказать ничего не могу. Может кто другой просветит более подробно.

Цитата
я не могу запустить вот этот кусок кода


В модуле библиотеки указывается Alias "Dfgh". А при вызове это упущено. Может в этом дело?

Да, если в одной папке вместе находятся libd.dll.a и libd.a, то приоритет компоновки имеет первая.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
RoloverДата: Воскресенье, 14.07.2013, 16:02 | Сообщение # 3
Лейтенант
Группа: Пользователи
Сообщений: 45
Репутация: 0
Статус: Offline
Цитата (haav)
В модуле библиотеки указывается Alias "Dfgh". А при вызове это упущено. Может в этом дело?
Да Вы правы  именно это бы послужило ошибкой, но добавив в декларацию Alias ничего не изменилось

и в голове промелькнуло
Цитата
Статическая библиотека представляет собой хранилище функции(ий), которые необходимы вашему проекту только на стадии компилирования

Компилирование ))))!!!!!!!! конечно !!!!!
Нужно скомпилировать файл....  и Все заработало )))!!!

А отсутствие Alias в  декларации..вызвало ошибку именно на стадии компилирования в командной строке "undefined reference"


Объяснив другому, поймешь, что понял сам.
 
Форум » Freebasic » Обзор статей с сайта http://users.freebasic-portal.de/freebasicru/ » Пользовательские библиотеки (Все о написании и компиляции *.dll и *.a)
  • Страница 1 из 1
  • 1
Поиск: