LINUX.ORG.RU

Проблема при подключении header-ов


0

1

Добрый вечер. Есть такая проблема, есть простейшая программа на C++ (HelloWorld). Собираю с помощью qmake, make. Если у меня есть просто один исходник, то сборка проходит нормально, но при попытке вынести инклуды в хедер make вылетает с ошибкой:

/home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.7.2/../../../../arm-linux-gnueabihf/include/c++/4.7.2/arm-linux-gnueabihf/bits/os_defines.h:40:22: fatal error: features.h: No such file or directory
compilation terminated.

source
#include "aaa.h"

int main()
{
    printf("Hello World!");
    return 0;
}


header

#include "stdio.h"

Ответ на: комментарий от Sakura

Таки интересно почему «stdio.h», а не <stdio.h>. Но не суть.

Рекомендую поробовать ключи "-v -E" для того чтобы проанализировать откуда и что берется. Не используются ли файлы, например, чужой архитектуры.

io ★★
()

потому что man cpp

хидеры в кавычках ищутся только в текущем каталоге и в явно указанных через -I путях

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

вот в этом как раз слабо разбираюсь. Это ж как я понимаю ключи для gcc, так что если их юзать, то их в makefile прописывать?

Sakura
() автор топика
Ответ на: комментарий от Sakura

Нет, т.к. -E нужен для генерации файла после препроцессирования.

Лучше взять команду из лога (собирается или хотя бы команда видна на экране?), отбросить -o file (если есть) и добавить -v -E. Запустить в соответствующей директории и вывод перенаправить в какой-нибудь файл. По выводу можно понять какие директории и файлы были задействованы.

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

gcc -e -V main.cpp

Using built-in specs.
COLLECT_GCC=/home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-gcc-4.7.2
Target: arm-linux-gnueabihf
Configured with: /opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/.build/src/gcc-linaro-4.7-2012.07/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-linux-gnueabihf --prefix=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/install --with-sysroot=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/install/arm-linux-gnueabihf/libc --enable-languages=c,c++,fortran --enable-multilib --with-arch=armv6zk --with-tune=arm1176jzf-s --with-fpu=vfp --with-float=hard --with-pkgversion='crosstool-NG linaro-1.13.1-2012.07-20120720 - Linaro GCC 2012.07' --with-bugurl=https://bugs.launchpad.net/gcc-linaro --enable-__cxa_atexit --enable-libmudflap --enable-libgomp --enable-libssp --with-gmp=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-mpfr=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-mpc=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-ppl=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-cloog=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-libelf=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-host-libstdcxx='-L/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static/lib -lpwl' --enable-threads=posix --disable-libstdcxx-pch --enable-linker-build-id --enable-gold --with-local-prefix=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/install/arm-linux-gnueabihf/libc --enable-c99 --enable-long-long
Thread model: posix
gcc version 4.7.2 20120701 (prerelease) (crosstool-NG linaro-1.13.1-2012.07-20120720 - Linaro GCC 2012.07) 
COLLECT_GCC_OPTIONS='-v' '-E' '-march=armv6zk' '-mtune=arm1176jzf-s' '-mfloat-abi=hard' '-mfpu=vfp' '-mtls-dialect=gnu'
 /home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../libexec/gcc/arm-linux-gnueabihf/4.7.2/cc1plus -E -quiet -v -imultilib . -imultiarch arm-linux-gnueabihf -iprefix /home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.7.2/ -isysroot /home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../arm-linux-gnueabihf/libc -D_GNU_SOURCE main.cpp -march=armv6zk -mtune=arm1176jzf-s -mfloat-abi=hard -mfpu=vfp -mtls-dialect=gnu
ignoring nonexistent directory "/home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.7.2/../../../../arm-linux-gnueabihf/include/c++/4.7.2/arm-linux-gnueabihf/arm-linux-gnueabihf"
ignoring duplicate directory "/home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../lib/gcc/../../lib/gcc/arm-linux-gnueabihf/4.7.2/../../../../arm-linux-gnueabihf/include/c++/4.7.2"
ignoring duplicate directory "/home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../lib/gcc/../../lib/gcc/arm-linux-gnueabihf/4.7.2/../../../../arm-linux-gnueabihf/include/c++/4.7.2/arm-linux-gnueabihf/."
ignoring nonexistent directory "/home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../lib/gcc/../../lib/gcc/arm-linux-gnueabihf/4.7.2/../../../../arm-linux-gnueabihf/include/c++/4.7.2/arm-linux-gnueabihf/arm-linux-gnueabihf"
ignoring duplicate directory "/home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../lib/gcc/../../lib/gcc/arm-linux-gnueabihf/4.7.2/../../../../arm-linux-gnueabihf/include/c++/4.7.2/backward"
ignoring duplicate directory "/home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../lib/gcc/../../lib/gcc/arm-linux-gnueabihf/4.7.2/include"
ignoring nonexistent directory "/home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../arm-linux-gnueabihf/libc/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/install/arm-linux-gnueabihf/libc/include/."
ignoring nonexistent directory "/home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../arm-linux-gnueabihf/libc/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/install/arm-linux-gnueabihf/libc/include/arm-linux-gnueabihf"
ignoring nonexistent directory "/home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../arm-linux-gnueabihf/libc/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/install/arm-linux-gnueabihf/libc/include"
ignoring duplicate directory "/home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../lib/gcc/../../lib/gcc/arm-linux-gnueabihf/4.7.2/include-fixed"
ignoring duplicate directory "/home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../lib/gcc/../../lib/gcc/arm-linux-gnueabihf/4.7.2/../../../../arm-linux-gnueabihf/include"
ignoring duplicate directory "/home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../arm-linux-gnueabihf/libc/usr/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/i386-linux-gnu
 /home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.7.2/../../../../arm-linux-gnueabihf/include/c++/4.7.2
 /home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.7.2/../../../../arm-linux-gnueabihf/include/c++/4.7.2/arm-linux-gnueabihf/.
 /home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.7.2/../../../../arm-linux-gnueabihf/include/c++/4.7.2/backward
 /home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.7.2/include
 /home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.7.2/include-fixed
 /home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.7.2/../../../../arm-linux-gnueabihf/include
 /home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../arm-linux-gnueabihf/libc/usr/include/.
 /home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../arm-linux-gnueabihf/libc/usr/include/arm-linux-gnueabihf
End of search list.
# 1 "main.cpp"
# 1 "<command-line>"
# 1 "main.cpp"
# 1 "aaa.h" 1
In file included from main.cpp:1:0:
aaa.h:1:18: fatal error: QtCore: No such file or directory
compilation terminated.

Sakura
() автор топика
Ответ на: комментарий от ananas

Причем тут -l? Если изначально проблема состоит в

.../bits/os_defines.h:40:22: fatal error: features.h: No such file or directory
compilation terminated.

Sakura
() автор топика
Ответ на: комментарий от Sakura

при том. если ты утверждаешь, что сам хидер у тебя есть - укажи к нему путь компилятору явно, и посмотри, снимется проблема, или нет

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

попробуй явнь задать путь к инклудам, ну там через

-I /path/to/headers

rikardoac
()
Ответ на: комментарий от Sakura

потому что нужно указывать не make-у, а gcc. это его флаг, вернее, это флаг cpp

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

это символически. Там достаточно длинный путь. Нет смысла переписывать.

Sakura
() автор топика

смог собрать данный пример, используя только gcc. Но при этом при попытке запуска получил сигфолт ))
qmake->make пока безрезультатно

Sakura
() автор топика
Ответ на: комментарий от Sakura

Что-то я тебя не пойму. Makefile - это просто удобная запись параметров для компилятора. В конце концов оно все переменные подставляются и получается нормальная команда. Если тебе удалось скомпилировать программу, просто подставив вручную параметры для gcc, значит у тебя в Makefile что-то указано неправильно.

Попробуй заново написать Makefile или, если он создается другой программой, подправь его, добавив недостающие либы и инклуды.

rikardoac
()
Ответ на: комментарий от rikardoac

В том то и проблема, что gcc это собралось в лоб

gcc main.cpp
По этому я и не могу понять. что не так с Makefile-ом. Кроме того проект, который в итоге необходимо будет собрать достаточно большой, поэтому хотелось всё таки разобраться с проблемой. Ну и для общего развития не помешает.

Sakura
() автор топика
Ответ на: комментарий от Sakura

Makefile:

$(CC)=gcc
program: main.cpp
<здесь tab>$(CC) main.cpp -o program
Дальше
make

Попробуй, если и так не соберет, тогда у тебя возможно проблемы с переменными окружениями.

И проверь свой проект, может у тебя не все библиотеки подключены?

rikardoac
()
Ответ на: комментарий от Sakura

Попробуй указать этот путь не самому make'у, а добавить его в Makefile.

После qmake ты получишь Makefile вида:

CC            = arm-linux-gnueabi-gcc
CXX           = arm-linux-gnueabi-g++
DEFINES       = -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED
CFLAGS        = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)
CXXFLAGS      = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)
INCPATH       = -I/usr/local/Qt-arm/mkspecs/qws/linux-arm-gnueabi -I. -I/usr/local/Qt-arm/include/QtCore -I/usr/local/Qt-arm/include/QtNetwork -I/usr/local/Qt-arm/include/QtGui -I/usr/local/Qt-arm/include/QtXml -I/usr/local/Qt-arm/include -I.
LINK          = arm-linux-gnueabi-g++
LFLAGS        = -Wl,-O1 -Wl,-rpath,/usr/local/Qt-arm/lib
LIBS          = $(SUBLIBS)  -L/usr/local/Qt-arm/lib -lQtXml -L/usr/local/Qt-arm/lib -lQtGui -lQtNetwork -lQtCore -lpthread
...

А теперь добавь в INCPATH путь к интересующим тебя файлам

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

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

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

header

#include «stdio.h»

aaa.h:1:18: fatal error: QtCore: No such file or directory

Ой, чего-то ты не договариваешь.

anonymous
()
Ответ на: комментарий от ananas

В лоб я собрал gcc, который собирал, по указанному выше ману. Я, конечно, не гуру, но хотя бы это понимаю.

Sakura
() автор топика
Ответ на: комментарий от Sakura

А вообще, обрати внимание на это:

ignoring nonexistent directory «/home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.7.2/../../../../arm-linux-gnueabihf/include/c++/4.7.2/arm-linux-gnueabihf/arm-linux-gnueabihf»

и вот это:

/home/sakura/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.7.2/../../../../arm-linux-gnueabihf/include/c++/4.7.2/arm-linux-gnueabihf/bits/os_defines.h:40:22: fatal error: features.h: No such file or directory compilation terminated.

Есть подозрение, что qmake тебе кривые пути генерит, а если компилять ручками из консоли, все нормально цепляется....

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

Потому что вообще задача состоит в том, чтобы пересобрать достаточно большой Qt проект под Raspberry. Для тестов была взята его САМАЯ ВАЖНАЯ часть.

Sakura
() автор топика
Ответ на: комментарий от solovey

Я на эти строки тоже долго залипал, попробую поменять.

Sakura
() автор топика
Ответ на: комментарий от Eddy_Em

Не знаю... У меня на 200 Мгц арме с 64 Мб оперативы Qt-шное приложение вполне работает... Хотя я, конечно, еще не закончил, но особых багов или сильных тормозов пока не видно.

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

А здесь всё просто. Есть проект, который написан на Qt и прекрасно работает, при этом к ресурсам не требователен (около 30мб памяти, да и проца не жрёт). Raspberry рассматривается как один из вариантов, на чём его можно запускать (рассматривается в силу цены, размеров и в основном потому что долго этим Raspberry по ушам ездили). Не принципиально запускать именно на нём, в основном просто интерес и самообучение(thanks lor).

Sakura
() автор топика
Ответ на: комментарий от Eddy_Em

Qt,например, для GUI. Нормальный x-сервер такая железка явно не потянет, но если графический интерфейс все-таки нужен, то почему не Qt?

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

Тут основную роль играет время. Что быстрее, изучить wxvidgets\motiff, или настроить кросс-компиляцию? Я думаю всё таки второе.

Sakura
() автор топика
Ответ на: комментарий от Eddy_Em

мне стыдно, но я, например, не знал ни о том, ни о другом... Поэтому мой проект уже на Qt...

Возможно, следующее решение будет уже более легковесным. Кстати, спасибо за подсказку - повнимательнее гляну на wxWidgets. Хотя бы в целях саморазвития

solovey ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.