vala
1.0.0
1.0.0
  • Учебник Vala
  • Основы
    • Элементы языка
      • Типы данных
      • Управляющие конструкции
      • Методы
      • Делегаты
      • Лямбды / Замыкания
      • Пространства имён
      • Структуры
      • Классы
    • ООП
      • Основы
      • Конструктор
      • Деструктор
      • Сигналы
      • Свойства(Properties)
      • Наследование
      • Абстрактные классы
      • Интерфейсы / Миксины
      • Полиморфизм
      • Сокрытие методов
      • Информация о типах времени выполнения(Run-Time Type Information)
      • Динамическое приведение типов(Dynamic Type Casting)
      • Универсальные шаблоны(Generics)
      • Создание объектов в стиле GObject
      • Интеграция с D-Bus
      • Профили(Другие бэкенды помимо GLib)
  • Продвинутые возможности
    • Ассерты и контрактное программирование
    • Обработка ошибок
    • Управление параметрами
    • Методы с поддержкой синтаксиса
    • Многопоточность
    • Главный цикл(The Main Loop)
    • Асинхронные методы
    • Слабые ссылки(Weak References)
    • Список аргументов переменной длины
    • Указатели
    • Классы не наследующие Object
    • Коллекции
      • Введение
      • HashSet<G>
      • ArrayList<G>
      • HashMap<K,V>
      • Lock-free структуры
  • Экспериментальные фичи
    • Введение
    • Строгий не null режим(Rust mode)
    • Литералы регулярных выражений(regexp)
    • Цепочки связанных выражений
  • Использование и создание библиотек
    • Введение
    • Инструменты
    • Генерирование VAPI файла из предыдущего с помощью vapigen.
    • Использование библиотек
    • Создание библиотеки
    • Vala and C
    • Meson
      • Config file
      • Static Library
      • Shared Library
      • Target GLib Version
  • Технические приёмы
    • Unit тестирование
    • Отладка
    • Использование GLib
  • Продвинуты гайд(WIP)
  • Habr
  • Примеры кода
  • Functional Programming
    • Gpseq
    • Compose
  • Examples
    • Basic
    • GTK
      • Базовые GTK программы
      • Flappy Bird(WIP)
      • DnD
    • Websocket
  • Apps
    • Games
  • Meson-Book
    • MesonBook
    • Wrap
    • Crosscompile
    • Object files
    • Library
    • Executable
    • Code Generation
    • Installing
    • Unit Tests
    • Meson 0.54
    • Meson 0.53
  • golang-book
    • Ваша первая программа
    • Типы
    • UPDATE.MD
Powered by GitBook
On this page
  • prog.vala
  • mylib.vala
  • meson.build
  • Object files

Was this helpful?

  1. Использование и создание библиотек
  2. Meson

Static Library

prog.vala

class MainApp : Object {
    public static int main(string[] args) {
        var l = new LibraryObject();
        l.func();
        return 0;
    }
}

mylib.vala

public class LibraryObject : Object {
    public void func() {
       stdout.printf("Method in library called.");
    }
}

meson.build

project('valastatic', 'vala', 'c')
#Список зависимостей, glib это vala std
valadeps = [dependency('glib-2.0'), dependency('gobject-2.0')]
#Объявление статической библиотеки
l = static_library('valalib', 'mylib.vala', dependencies : valadeps)
m = static_library('extractedlib',
  objects : l.extract_all_objects(),
  install : true)
#Скомпилировать исполнительный файл с библиотекой
e = executable('valaprog', 'prog.vala',
link_with : l,
dependencies : valadeps)

test('valastatictest', e)

Object files

Иногда вы не можете создавать файлы из источников, но вам нужно использовать существующий объектный файл. Типичный случай - использование объектного файла, предоставленного третьей стороной. Объектные файлы могут быть указаны следующим образом:

exe = executable('myexe', 'source.cpp', objects : 'third_party_object.o')

В коде основного примера можно увидеть объект m который отвечает как раз за вывод экспорт объектных файлов в build директорию.

Очевидно строки с 6 по 8 необязательны

Другой случай - это когда вы хотите использовать объектные файлы, встроенные в один целевой объект непосредственно в другом. Типичный случай-это когда вы создаете общую библиотеку и у нее есть внутренний класс, который не экспортируется в ABI. Это означает, что вы не можете получить доступ к нему, даже если вы связываетесь с библиотекой. Типичные обходные пути для этого включают создание как динамической, так и статической версии библиотеки или размещение исходного файла в списке источников тестового исполняемого файла. Оба этих подхода приводят к тому, что источник строится дважды, что является замедляет процесс сборки.

В Meson вы можете извлекать объектные файлы из целевых объектов и использовать их как есть на других целевых объектах. Это и есть синтаксис для него.

lib = shared_library('somelib', 'internalclass.vala', 'file.vala', ...)
eo = lib.extract_objects('internalclass.vala')
executable('classtest', 'classtest.vala', objects : eo)

Здесь мы берем внутренний объект класса и используем его непосредственно в тесте. Исходный файл компилируется только один раз.

Обратите внимание, что неосторожное использование этой функции может вызвать странные ошибки. Например, попытка использовать объекты исполняемой или статической библиотеки в динамической библиотеке не будет работать, поскольку объекты динамической библиотеки требуют специальных флагов компилятора. Получение этого права является ответственностью пользователя. По этой причине настоятельно рекомендуется использовать эту функцию только для создания исполняемых файлов модульного теста таким образом, как описано выше.

PreviousConfig fileNextShared Library

Last updated 4 years ago

Was this helpful?