gtk.h отсутствует в Visual Studio для разработки Linux - PullRequest
0 голосов
/ 19 сентября 2018

В настоящее время я пытаюсь написать приложение для Raspberry Pi 3B под Rasbpian с помощью плагина Linux Development в сообществе Visual Studio 2017.Мне удалось успешно развернуть пример «Blink», который, согласно учебному пособию, был благородно прикреплен людьми Microsoft, и все прошло хорошо.Я даже сделал некоторую передачу через SPI благодаря библиотеке wiringPi.Затем я хотел бы добавить некоторый графический интерфейс в свое приложение, чтобы можно было, например, сделать некоторую передачу по нажатию кнопки на экране.

IntelliSense намекнул мне, что, на самом деле, есть gtk-3.0 библиотека присутствует в наборе инструментов.Кажется, что библиотеки копируются с целевого устройства на каждое соединение или около того, и я установил gtk на мой Raspberry.Поэтому я добавил в этот пример Blink простую строку:

#include <gtk-3.0/gtk/gtk.h>

При попытке компиляции, конечно, было почти 4 тыс. Ошибок.Ну, достаточно сказать, с небольшим намеком из этого старого урока и небольшим количеством проб и ошибок, мне удалось добавить этот набор ссылок в Отладка / Свойства проекта / Свойства конфигурации / Каталоги VC ++ / Каталоги файлов заголовков:

enter image description here

Все идет в многообещающем направлении, так как количество ошибок уменьшилось с 4k до одного:

gtk-3.0\gtk\gtk.h: No such file or directory

Независимо от того, чтоэтот файл фактически находится в этом месте:

enter image description here

Независимо от комбинации ссылок в конфигурации выше и использования композиции операторов компилятор (?) не может найтиэтот чертов файл

Пожалуйста, помогите

EDIT

Я только что подтвердил, что это действительно проблема с целевой конфигурацией.Это плохо или хорошо, в зависимости от точки зрения.Хорошо, потому что, вероятно, все хорошо с настройкой VS.Плохо, потому что я ничего не знаю о компиляции под Linux.

На цели (Raspberry Pi 3B) все компоненты для компиляции копируются плагином Linux Development.Итак, в Терминале я выполнил строку:

g++ main.cpp -o Blink2onRPi

и получил

main.cpp:4:21: fatal error: gtk/gtk.h: no such file or directory

Теперь я изменил строку include в main.cpp на целевом RPi так:

#include <gtk-3.0/gtk/gtk.h>

А теперь его не хватает <gdk/gdk.h>!Когда это изменение сделано на устройстве с Windows-хостом - тот же результат, но в VS.

Как я имел дело с подобной проблемой в VS, после установки ссылок для IntelliSense (теперь, видимо, они для этой цели), теперь, вероятно,аналогичные зависимости должны быть установлены где-то на Raspbian.Но где?

EDIT2

При выполнении:

g++ main.cpp -o Blink2onRPi `pkg-config --cflags --libs gtk+-3.0`

на целевом RPi больше нет ошибок, связанных с GTK, только wiringPi (также присутствующий в проекте) undefinedРекомендации.Возникает два возможных вопроса:

1) Как настроить wiringPi на RPi, чтобы проект мог быть скомпилирован вручную на цели, и

2) Как / где добавить вышеуказанную строку в Visual Studio,поэтому он выполняется удаленно со всеми зависимостями GTK, добавленными должным образом к цели

Исследование стандартной библиотеки wiringPi (так как это пример с Blink для кросс-компиляции разработки Linux) Я обнаружил, что в Project Properties / Linker / Input/ Зависимости библиотеки есть загадочная запись:

wiringPi

Только это, не более того.После удаления этой записи при компиляции выявляются те же ошибки, что и ранее для цели (которой явно не хватает правильной настройки wiringPi) - неопределенные ссылки (не отмечены никакие отсутствующие заголовки).Может ли это быть актуально для дела?Если так, как я могу добавить туда такую ​​запись, которая будет иметь дело с отсутствующими зависимостями GTK?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

TL; DR

Используйте снимок экрана ниже, чтобы узнать, куда добавить pkg-config вызовы в конфигурации VS, чтобы он направлял его компилятору и компоновщику на цели.Спасибо @zaguoba за предоставление этих данных.

ОРИГИНАЛЬНЫЙ ОТВЕТ:

Список включаемых каталогов предоставлен pkg-config.Например, pkg-config --cflags-only-I gtk+-3.0 предоставит вам список необходимых каталогов для включения.Это те, которые вам нужно добавить в каталоги, где VC ++ рассмотрит включаемые файлы.Если вы добавите относительный путь, который вы используете в #include, к одному из этих путей, вы сможете найти файл.

Пример:

Если вы добавите в каталоги C:\Program Files\foo\bar\gtk+-3.0

и иметь в вашем C-файле: #include <gtk/gtk.h>

, тогда компилятор будет искать C:\Program Files\foo\bar\gtk+-3.0\gtk\gtk.h.

РЕДАКТИРОВАТЬ:

Все это означает, что ошибки «файл не найден» связаны с тем, что вы действительно строите на цели, а цель не знает, что означает C:\Program Files\....Это должны быть пути в целевой файловой системе, где вызывается компилятор.И это именно то, что обеспечивает pkg-config.

Копия этих файлов на машинных файловых системах Windows предназначена исключительно для использования с Intellisense, а не для использования компилятором.

РЕДАКТИРОВАТЬ 2:

Так что этоэтот плагин Visual Studio 2017 Community Linux Development - это то, что нужно понять.Это не для кросс-компиляции из Windows в Linux, а просто синхронизирует код с хостом Windows (для использования Intellisense), но основывается на цели .Это означает, что все пути и команды являются путями и командами Linux, выполняемыми на цели.

Вот рабочая конфигурация OP:

Where to put pkg-config calls in Visual Studio compiler and linker configuration

0 голосов
/ 19 сентября 2018

При такой настройке вы должны

#include <gtk\gtk.h>

вместо

#include <gtk-3.0\gtk\gtk.h>

В качестве альтернативы удалить все эти каталоги VC ++ / каталоги заголовочных файлов и оставить только один из них, заканчивающийся include/ вместо перечисления всех поддиректорий.

...