1

Подскажите как скомпилировать файл. Использую g++ пытаюсь скомпилить

adel@comp:~/Документы/c++$ g++ -lm -o output firs.cpp
adel@comp:~/Документы/c++$ 

создается файл выходит ошибка

вот сам cpp файл

#include <iostream>
using namespace std;

int main(void)
{
       cout<<"Hello world";
       return 0; //Возвращаем 0 - код возврата для ОС
}

1
  • 7
    в терминале ./output 18 дек 2019 в 15:23

1 ответ 1

3

Запуск двойным нажатием определяет настройка Вашего проводника. Есть вероятность, что она запускается в новой сессии терминала, которая Вам не отображается, а Вы думайте что запуск не произошел...

Для запуска данного приложения Вам необходимо начать сессию командной оболочки bash(ну или чего-то еще что у Вас есть zsh, sh) которая будетВам доступна, перейти в дир. с Вашим кодом и вызвать gcc(g++) (ну или LLVM clang) для сборки Вашего кода

g++ ./source.cpp 

Ну или смотря что вы хотите от gcc)) Используйте Ваш рецепт из вопроса )) После этого Вы найдете a.out ELF файл

Для запуска Вы должны быть уверенны что стоит x(execute) бит. можете проверить этой командой

ls -l | fgrep a.out

И получить на выходе что-то по типу

-rwxrwxr-x 1 usr usr 9048 dec 18 00:00 a.out

Если есть x биты - то все отлично, его нет, то сначала вызовете

chmod +x ./app

И далее просто запустите его - В линухе по причине безопасности для запуска нужен абсолютный путь - это можно сделать так :

./app - в конкретной директории

или

/path_to_/app  - из любой директории

где ./ укажет текущий путь($pwd)

Совет: не собирайте все командами в оболочке... лучше собирать утилитой make по рецептам указанным в Makefile.

Для этого Вам понадобится makefile - который можно или написать, или генерировать (вариантов тьма, но лучше научиться юзать CMake https://cmake.org/ - там все есть) он поможет Вам организовать сборку больших решений))

CMake генерирует Вам makefile в соответствии с конфигами которые Вы ему напишите )

Самый минимум для CMake CMakeLists.txt

cmake_minimum_required(VERSION 3.16.0-rc3)

set(PROJECT_NAME "Test_for_stack")
project(${PROJECT_NAME} DESCRIPTION "C++" LANGUAGES C CXX)

include_directories(${PROJECT_SOURCE_DIR})

set(SOURCE_CODE_CPP_MAIN ${PROJECT_SOURCE_DIR}/source.cpp)

add_executable(${PROJECT_NAME} ${SOURCE_CODE_CPP_MAIN })

Или напишите makefile сами ) Вот лайтовый пример makefile

CC := g++-9
CLEAN_COM := rm -rf
compile_flags := -std=c++17 -m64 -march=native -Wall -O2 -Wpedantic -pedantic -fno-inline -DNDEBUG

app: main.o
$(CC) -o app main.o $(compile_flags)

main.o: main.cpp
    $(CC) -E main.cpp $(compile_flags) >> main.i
    $(CC) -S main.i $(compile_flags) >> main.s
    $(CC) -c main.s $(compile_flags) >> main.o 

.PHONY : clean_buf 
clean_buf :
    $(CLEAN_COM) main.i main.s main.o

.PHONY : clean 
clean :
    $(CLEAN_COM) main.i main.s main.o app

Далее просто дерните в дир. где CMakeLists.txt

cmake . && make

Или

cmake . && cmake. — build
18
  • 1
    хороший у Вас make файл. Прям таки лайтовый. плюс вызов смейка написан кривовато. Он не поможет запустить обычный make файл.
    – KoVadim
    18 дек 2019 в 21:10
  • 1
    CMakeLists.txt для такого проекта пишет в две строки, ну ок, в три, что бы 11 плюсы на старых компиляторах разрешить. Во вторых, вызывать явно make для компиляции после cmake не нужно - cmake --build . сделает все в лучшем виде (он даже корректно под виндой соберет, а make - не факт). В третьих. по хорошему, для помойки от cmake нужно создавать каталог, в котором все собирать. А обычный Makefile ... вот реально нужно препроцессировать файл?
    – KoVadim
    18 дек 2019 в 21:35
  • 2
    @Andrey Я вижу. :) Я имею в виду, что от такого ответа может создаться впечатление, что без CMake работать не будет. 18 дек 2019 в 21:39
  • 1
    @HolyBlackCat Я поменяю местами эти 2 пункта 18 дек 2019 в 21:40
  • 2
    а самой главной информации для OP'а, что он уже «скомпилировал» файл и у него просто не получается его запустить в ответе всё равно нет...
    – Fat-Zer
    18 дек 2019 в 23:31

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.