LINUX.ORG.RU

Как линковать приложение на Vala с сишными либами?

 , , ,


1

2

Допустим, есть helloworld на Вале, который использует стороннюю библиотеку, предположим, libportmidi. Для portmidi уже есть соответствующий vapi-файл, который я положил к исходникам и указал на соответствующую директорию компилятору:

valac --vapidir=. --pkg portmidi pm_test.vala
В итоге всё это безобразие кое-как компилируется, но вылетает на линковке, поясняя это возгласом:
/tmp/ccQMlfPs.o: In function `_vala_main':
pm_test.vala.c:(.text+0x72): undefined reference to `Pm_GetDeviceInfo'
collect2: error: ld returned 1 exit status
error: cc exited with status 256
Compilation failed: 1 error(s), 0 warning(s)

Как поступают белые люди в таких случаях?

Вроде кое-как получилось. Оказывается, следующий аргумент после флага -Х игнорируются valac и передаётся непосредственно Си-компилятору. Получается как-то так:

valac --vapidir=. --pkg portmidi pm_test.vala -X -lportmidi

Тогда другой вопрос к знатокам - зачем нужны файлы *.deps?

meliafaro ★★★★ ()
Последнее исправление: meliafaro (всего исправлений: 1)
Ответ на: комментарий от meliafaro

Тогда другой вопрос к знатокам - зачем нужны файлы *.deps?

Vala/UpstreamGuide: The only other file that should be distributed is a deps file, which lists pkg-config names of any dependencies exposed in the public API. Although not technically required, this file helps avoid confusing errors about undefined symbols.

backbone ★★★★★ ()
Ответ на: комментарий от meliafaro

CMake с Валой - то ещё извращение

Когда нужно фигачить много либ и модулей с кучей зависимостей, делаете git-субмодулем необходимые процедуры и весь проект занимает несколько строк.

backbone ★★★★★ ()