I am trying to build program with multiple files for the first time.
I have never had any problem with compliling program with main.cpp only.
With following commands, this is the result:
$ g++ -c src/CNumber.cpp src/CNumber.h -o src/CNumber.o
$ g++ -c src/CExprPart.cpp src/CExprPart.h -o src/CExprPart.o
$ g++ -c src/CExpr.cpp src/CExpr.h -o src/CExpr.o
$ g++ -c src/main.cpp -o src/main.o
$ g++ src/CNumber.o src/CExprPart.o src/CExpr.o src/main.o -o execprogram
src/CNumber.o: file not recognized: File format not recognized
collect2: error: ld returned 1 exit status
What could cause such error and what should I do with it?
Using Linux Mint with gcc (Ubuntu/Linaro 4.7.2-2ubuntu1).
Thank you
asked Jun 15, 2013 at 17:58
2
This is wrong:
g++ -c src/CNumber.cpp src/CNumber.h -o src/CNumber.o
You shouldn’t «compile» .h files. Doing so will create precompiled header files, which are not used to create an executable.
The above should simply be
g++ -c src/CNumber.cpp -o src/CNumber.o
Similar for compiling the other .cpp files
Michael Petch
45.8k8 gold badges104 silver badges192 bronze badges
answered Jun 15, 2013 at 18:22
nosnos
222k57 gold badges412 silver badges501 bronze badges
2
I ran into this error in building something — it turned out to be due to a previous build failing while compiling a source file to an .o file — that .o file was incomplete or corrupted, so when I tried another build it gave this error on that file.
The solution was to just delete the .o file (or run make clean
, if you have a makefile with that target).
answered Jan 11, 2016 at 23:48
Brian BurnsBrian Burns
20.2k8 gold badges82 silver badges76 bronze badges
1
Try putting all of the following files in one directory:
example.cpp:
#include<iostream>
#include<string>
#include "my_functions.h"
using namespace std;
int main()
{
cout << getGreeting() << "n";
return 0;
}
my_functions.cpp:
#include<string>
using namespace std;
string getGreeting()
{
return "Hello world";
}
my_functions.h:
#ifndef _MY_FUNCTIONS_H
#define _MY_FUNCTIONS_H
#include<string>
using namespace std;
string getGreeting();
#endif
Then issue these commands:
$ g++ example.cpp my_functions.cpp -o myprogram
~/c++_programs$ ./myprogram
Hello world
answered Jun 15, 2013 at 18:16
7stud7stud
46.6k14 gold badges97 silver badges126 bronze badges
1
Добрый день!
Разработка ведется: Qt 5.7.0 + MinGW 5.3.0 (32-bit) + Qt Creator 4.0.2, Win7.
Заинтересовала суть ошибки «file not recognized: File format not recognized» и как с ней бороться, в случае если нет исходников библиотеки.
Столкнулся с такой ошибкой при подключение wsp32.dll [1] — реализация протокола wake для работы с прибором по rs232.
P.S. В конкретном случае — доступны исходники библиотеки, и с некоторыми изменениями в итоге затащу в проект как отдельные .cpp + .h, но хотелось бы понять причины ошибки и альтернативные пути исправления.
1. wsp32.dll и ее исходники в zip архиве
2. zip архив с тестовым Qt проектом подключающим данную библиотеку
- Печать
Страницы: [1] Вниз
Тема: Проблема компиляции Си программы при помощи gcc (Прочитано 3432 раз)
0 Пользователей и 1 Гость просматривают эту тему.
solyr
Пытаюсь откомпилировать программу в Ubuntu Desktop 8.04 Hardy Heron Установил пакеты gcc и build-essential. Пробую откомпилировать программу gcc имя_программы Выдает следующее сообщение
sajan@sajan-desktop:~/soft$ gcc prg4
prg4: file not recognized: File format not recognized
collect2: ld returned 1 exit status
Может проблема в кодировке исходного кода. Локализация по умолчанию в UTF-8. Пробовал сохранять исходный код программы в кодировке UTF-8, KOI, виндовозной ничего не помогает. То же самое. Посоветуйте в чем может прблема?
И ище вопрос. Стандартные Си шные хеадеры автоматически подключаются компилятором?
« Последнее редактирование: 02 Декабря 2009, 17:16:25 от solyr »
GOTO_sHELL
Переименуй файл в prg4.c
Пользователь решил продолжить мысль 02 Декабря 2009, 17:21:26:
хеадеры подключаются директивами include в файле с кодом.
« Последнее редактирование: 02 Декабря 2009, 17:21:26 от GOTO_sHELL »
solyr
не думал что gcc к расширениям в Linuxe требователен. Спасибо, программа откомпилировалась
wl
не думал что gcc к расширениям в Linuxe требователен
Гы-гы…
Для справки: операционная система линукс, точнее ее файловая система не знает, что такое «расширение имени файла». Это понятие появилось лет 20 назад в DOS, поскольку 8 символов оказалось недостаточно, с DOS же и умерло.
Здесь и точка, и все, что после нее, является такой же полноценной частью имени файла, как и все остальное.
Винда позволяет ленивым юзерам части имен скрывать.
« Последнее редактирование: 03 Декабря 2009, 11:32:33 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, «Гамлет», вольный перевод)
Riateche
Можно задать язык вручную: gcc -x c prg4
Подробнее смотрите в мане
solyr
понял насчет расширения. Я даж не подозревал что после точки указывается язык компиляции. Сенкс.
wl
понял насчет расширения. Я даж не подозревал что после точки указывается язык компиляции. Сенкс.
Чего???
Вы ничего не поняли!
Никаких языков после точки не указывается!
Компилятор должен получить в параметрах имя файла.
Вы ему указали prg4.
Поэтому он честно попытался открыть файл с именем prg4 в текущей директории.
Однако, Вы компилятор обманули — файл с текстом программы назывался prg4.c, а в файле prg4 было что-то еще.
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, «Гамлет», вольный перевод)
solyr
исходный код программы был изначально в prg4 Он никак не компилился Выдавал сообщение в что указано в первом посте После того как приписал к имени файл .с нормально скомпилил программу и выдал a.out
Riateche
Чего???
Вы ничего не поняли!
Никаких языков после точки не указывается!Компилятор должен получить в параметрах имя файла.
Вы ему указали prg4.
Поэтому он честно попытался открыть файл с именем prg4 в текущей директории.
Однако, Вы компилятор обманули — файл с текстом программы назывался prg4.c, а в файле prg4 было что-то еще.
По-моему, это вы ничего не поняли. Имя файла было указано правильно. gcc отказался его компилировать потому, что gcc действительно определяет язык программы по расширению.
- Печать
Страницы: [1] Вверх
Update: Forum Guidelines & Code of Conduct
This topic has been deleted. Only users with topic management privileges can see it.
-
I am currently using qt version 5.4 (ubuntu os)
The following error occurs during the build.
Upload related settings.
I would be grateful if you could find out what I’m missing.< Error >
File not recognized: File format not recognized
/lib/x86_64-linux-gnu/libgcc_s.so.1
Collect2: error: ld returned 1 exit status< compilers >
/root/crosscompile-tools/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++<debuggers>
/root/crosscompile-tools/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf-gdb -
@this It’s trying to load a 64-bit libgcc for your arm build which is 32-bit and a different architecture.
-
@ambershark
Do you want to run the compiler and debugger in 64bit?
I did that.
I’ve also run 32bit, and I’ve run 64bit.
But the same error occurs.I do not understand well.
Could you explain more? -
@this You are cross compiling, right? In this case you need a cross compiled Qt (built with the same cross compiler).
lib/x86_64-linux-gnu/libgcc_s.so.1 — this is for x86_64 architecture
/root/crosscompile-tools/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++ — this is for ARM
ARM != x86_64 -
@jsulm Yes, cross-compile right.
So the compiler
/ root / crosscompile-tools / tools / arm-bcm2708 / gcc-linaro-arm-linux-gnueabihf-raspbian-x64 / bin / arm-linux-gnueabihf-g ++
.
What do you need to do more? -
@this As I said: you need to cross compile Qt. The Qt you have on your Ubuntu machine is for x86_64 not ARM.
-
@jsulm said in File not recognized: File format not recognized error:
cross compile Qt
sorry but,
I do not understand well.
I have installed everything related to cross compile
What do I need to do to set up arm cross compilation in qt? -
@this If you want to write Qt applications for your target device then you need Qt built for that device.
«I have installed everything related to cross compile» — what about Qt? Does your cross compilation set-up contain Qt for your target device? You cannot use your Ubuntu Qt packages for your target device as those are compiled for x86_64 not ARM.
What exactly did you install?
There is a description how to cross compile Qt for RaspberryPi: http://wiki.qt.io/Raspberry_Pi_Beginners_Guide -
@jsulm I have completed installation related to crosscompile.
I created a new project and proceeded with the build.
I also confirmed that an executable file is created in raspberry pi. I also confirmed that debugging is going well.So the crosscompile completed successfully.
By the way,
I have a problem when I crosscompile qt that I have already worked on (ubuntu qt)
Can not I crosscompile the qt I’ve been working on? -
@this Sorry, now I’m completely lost! Can you please clearly explain what you are really doing? You were talking about Qt from Ubuntu which you installed, now you say you’re building on RaspberryPi. Are you building on RaspberryPi for RaspberryPi (which isn’t cross compilation), or do you want to build on RaspberryPi for your Ubuntu PC?
If you’re crsoss compiling from RaspberryPi to Ubuntu then why do you use ARM cross compiler?«I have completed installation related to crosscompile» — what did you install and where?
«I have a problem when I crosscompile qt that I have already worked on (ubuntu qt)
Can not I crosscompile the qt I’ve been working on?» — I don’t know what you mean. -
@jsulm I do not speak English well.
So I use a translator.
So it seems that there is a problem in communication.I’m proceeding with ‘ubuntu-> raspberrypi’.
The following homepage is an item installed to crosscompile.
Https://medium.com/@amirmann/how-to-cross-compile-qt-for-raspberry-pi-3-on-linux-ubuntu-for-beginners-75acf2a078cA new project was created and cross-compiled successfully.
Executable file created in rasspberry pi.
Debugging went well.By the way,
I tried to crosscompile a project that was working with qt on ubuntu pc in the past.So I want to crosscompile with raspberry pi the project I worked on in the past.
However, the above error occurs.I want to build the qt that I worked on in the past with cross-compiled qt.
I’m sorry I’m not good at English.
I do not know if it was delivered properly. Sorry. -
@this said in File not recognized: File format not recognized error:
Executable file created in rasspberry pi.
You probably mean FOR RaspberryPi not IN.
In the first post you wrote:
«< Error >
File not recognized: File format not recognized
/lib/x86_64-linux-gnu/libgcc_s.so.1
Collect2: error: ld returned 1 exit status»
This looks to me like you’re trying to use your Ubuntu x86_64 Qt to cross compile for RaspberryPi. This cannot work. You need to use your cross compiled Qt. -
@jsulm Thank you.
I solved the problem.
I typed LIBS + = -L / lib / x86_64-linux-gnu / -lz in my .pro file
I modified it for arm, and it builds well.
Thank you for your help. -
@this excuse me, I have the same problem, I’m trying to complie in my raspberry pi, and the same error appears, I’m using a dynamic library (.so) and it seems that the problem its with the linker step, I see that you resolved the problem with that comand line, but Can you explain me more how to use that line? Thanks a lot !!
-
@oswaldopr said in File not recognized: File format not recognized error:
I’m trying to complie in my raspberry pi, and the same error appears, I’m using a dynamic library (.so)
You need to be sure the .so file you’re using is for the right platform (i.e. ARM)
Форум программистов Vingrad
Поиск: |
|
Qt Creator добавление динам. библиотек под Unix, file not recognized: File format not … |
Опции темы |
KillerrrK |
|
||
Новичок Профиль Репутация: нет
|
Здраствуйте уважаемые)) Хелп ми плиз… Не могу справится с Qt Creator под Ubuntu. Цепляю динамическую библиотеку .so, а компиляка говорит что не знает таких файлов! file not recognized: File format not recognized У друга все ок компилется! Бью голову об стол уже 3-й день. Кругом все по перерыл, но нашёл только, что якобы в настройках, в инструментах чтото не то…. Подскажите плз куда копать… |
||
|
|||
loneybibi |
|
||
Любитель Профиль
Репутация: 3
|
Вообще ничего не понятно, что цепляет, куда, зачем … Что то вроде «прилетели инопланетяне красная тряпка».. ——————— Red Hat Fedora 17 |
||
|
|||
borisbn |
|
||
Эксперт Профиль
Репутация: 48
|
KillerrrK, м.б. so-шник 64х разрядный, а приложение 32х ? Или наоборот. ——————— Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||
|
|||
math64 |
|
||
Эксперт Профиль Репутация: 23
|
Может быть .so лежит не в путях, в которых Ubuntu их ищет?
Но для release такое решение не годится — при переносе на другую машину путь будет другой, а для помещении в «стандартные» места нужны права рута. |
||
|
|||
bsa |
|
||
Эксперт Профиль
Репутация: 24
|
KillerrrK, вариантов 2. Либо разрядность библиотеки (32 и 64 бита) несовместима с проектом. Либо ты не так добавил библиотеку в проект. Если ты покажешь, как добавлял ее в проект и что именно говорится компилятором (используй тег quote для этого), то мы сможем тебе помочь более конкретно. ——————— Правильно заданный вопрос — половина ответа |
||
|
|||
KillerrrK |
|
||||||
Новичок Профиль Репутация: нет
|
Извените что долго не отвечал. В общем цепляю я libarchive. Установил с через apt-get ….
еще так пробовал:
дядька комплиллятор ругает меня так:
bsa «используй тег quote для этого» — подскажите о каком теге речь? Я с Qt Creator’ом работаю всего неделю (Да и работой то не назвать… Бедную библиотеку замучился ему пихать!). С Ubuntu такая же история… Как вы наверное уже заметили по ругательствам компилятора, я прилажение пишу под meego harmattan.(Ну точнее хочу написать.). Без этой библы все естественно прекрасно компилится) |
||||||
|
|||||||
bsa |
|
||
Эксперт Профиль
Репутация: 24
|
это тот, вместо которого ты использовал code=nocolor. В итоге, форматирование страницы форума зверско исказилось. ——————— Правильно заданный вопрос — половина ответа |
||
|
|||
KillerrrK |
|
||
Новичок Профиль Репутация: нет
|
Только что до меня наконец дошло попробовать написать не meego а просто C++ прилажение… И все прекрасно отработало… Может ктонибудь обьяснить мне с чем это связано? И если libarchive нельзя использовать, то может можно какуюнибудь другую zip библиотеку взять чтоб с zip’ами работать? Добавлено через 1 минуту и 14 секунд |
||
|
|||
loneybibi |
|
||
Любитель Профиль
Репутация: 3
|
насколько я помню есть встроенные методы для сжатияраспаковки qCompress qUncopmpress! но не помню точно что они могут! И на форуме много тем про это. ——————— Red Hat Fedora 17 |
||
|
|||
KillerrrK |
|
||
Новичок Профиль Репутация: нет
|
loneybibi спасибо за ссылочку на qzip. zlib также как и libarchive идет исходниками правильно? Но при этом libarchive удобней. И все же хотелось бы узнать как ее под harmattan пересобрать? |
||
|
|||
loneybibi |
|
||
Любитель Профиль
Репутация: 3
|
Это полностью встроенная возможность Qt, не отдельная библиотека! Я думаю она легко соберется под Harmatan! Все что нужно подключить qzipreader_p.h и qzipwriter_p.h. Далее по примеру как в статье приведены работайте с zip архивами! Заголовочные файлы лежат: ../qt/src/gui/text Прочитайте внимательней статью! http://www.wiki.crossplatform.ru/index.php…D0%B8_%D0%B2_Qt ——————— Red Hat Fedora 17 |
||
|
|||
bsa |
|
||
Эксперт Профиль
Репутация: 24
|
заходишь на сайт, загружаешь исходники, распаковываешь, читаешь вдумчиво файл INSTALL (или README, или еще что), затем следуешь инструкциям, только не забудь указать правильный —target у configure (или компилятор, для других систем сборки). ——————— Правильно заданный вопрос — половина ответа |
||
|
|||
|
Правила форума «С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets» | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) |
0 Пользователей: |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |