Проблемы с VAPI в GTK+ 3

Я пытаюсь скомпилировать Vala в ArchLinux, и когда я пытаюсь включить пакет gtk+-3.0, кажется, что GDK и GTK+ 2.0 также включены; valac --pkg gtk+-3.0 test.vala выдает следующие ошибки:

gdk-2.0.vapi:8.3-8.28: error: `Gdk.Selection' already contains a definition for `convert'
    public static void convert (Gdk.Window requestor, Gdk.Atom selection,     Gdk.Atom target, uint32 time_);
    ^^^^^^^^^^^^^^^^^^^^^^^^^^
gdk-3.0.vapi:8.3-8.28: note: previous definition of `convert' was here
    public static void convert (Gdk.Window requestor, Gdk.Atom selection, Gdk.Atom target, uint32 time_);
    ^^^^^^^^^^^^^^^^^^^^^^^^^^
gdk-2.0.vapi:10.3-10.44: error: `Gdk.Selection' already contains a definition for `owner_get'
    public static unowned Gdk.Window owner_get (Gdk.Atom selection);
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
gdk-3.0.vapi:10.3-10.44: note: previous definition of `owner_get' was here
    public static unowned Gdk.Window owner_get (Gdk.Atom selection);
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
--snip--
Compilation failed: 942 error(s), 0 warning(s)

Есть ли способ указать, чтобы не включать gtk+-2.0 или заставить valac игнорировать эти ошибки?


person Kara Brightwell    schedule 17.06.2011    source источник


Ответы (2)


Не имея доступа к исходному коду или среде сборки (при условии, что вы не просто набираете команду valac напрямую), решить эту проблему сложно. Используя очень простой test.vala с Vala 0.12.1, он отлично работает в моей системе.

В прошлом я видел плохие среды Vala из-за того, что скрывались старые версии Vala (и его файлы поддержки). Я рекомендую полностью удалить Vala 0.12.1, а затем просмотреть /usr для любых остатков. Простой и тщательный способ (хотя и трудоемкий) состоит в том, чтобы сделать это:

$ find /usr -name "*vala*"
$ find /usr -name "*.vapi"

Удалите все, что явно не является частью другого пакета. (Обратите внимание, что некоторые пакеты устанавливают свои собственные VAPI, например libgee.) Затем переустановите Vala 0.12.1 и посмотрите, сохраняется ли проблема.

person Jim Nelson    schedule 27.06.2011
comment
Когда я попробовал это, vala оставила некоторые вейпы в /usr/share/vala (в отличие от /u/s/vala-0.12, который был удален). Я удалил их и переустановил vala, но проблема осталась. Я также пробовал vala из Git версии 0.14, но он все еще работает. Арх. - person Kara Brightwell; 31.07.2011
comment
Недавно я перевел проект с GTK+2 на GTK+3, и на протяжении всего процесса у меня были похожие проблемы. Причина: некоторые другие библиотеки, от которых зависел наш проект (например, libunique и WebKit), полагались на GTK+2, что и вызывало конфликт. Просмотрите все пакеты, на которые опирается ваше приложение, и посмотрите, зависят ли какие-либо из них от GTK+2. (Самый простой способ — проверить их файл .deps, т. е. unique-1.0.deps, который находится рядом с их VAPI.) Затем вам нужно проверить, не зависит ли какой-либо из этих пакетов от GTK+2, и скоро. Я думаю, вы найдете преступника там. - person Jim Nelson; 31.07.2011

Какая версия вала? Я боюсь, что это должно быть что-то испорченное в вашем дистрибутиве. Можете ли вы вставить содержимое /usr/share/.../gtk+-3.0.deps?

Также попробуйте использовать valac --verbose, чтобы увидеть все загружаемые вейпы. Для каждого vapi просмотрите соответствующий файл .deps и проверьте, не завалялся ли где-нибудь gdk-2.0.

person lethalman    schedule 18.06.2011
comment
Это Вала 0.12.1. В /usr/share/vala-0.12/vapi/gtk+-3.0.deps нет ничего необычного: gio-2.0 atk cairo gdk-pixbuf-2.0 gdk-3.0 pango - person Kara Brightwell; 19.06.2011