C로 작성된 프로그램을 Windows에서는 두 번 클릭하면 실행할 수 있지만 Linux에서는 실행할 수 없습니다.

C로 작성된 프로그램을 Windows에서는 두 번 클릭하면 실행할 수 있지만 Linux에서는 실행할 수 없습니다.

Linux(Ubuntu 및 CentOS) 및 Windows 7 운영 체제에서 C 언어로 간단한 추가 프로그램을 작성했습니다. 소스 코드는 다음과 같습니다.

#include <stdio.h>
int main(){
int a,s,d;

printf("type the values u want to add and give tab between them\n");

scanf("%d %d",&a,&s);

d=a+s;

printf("addition is %d",d);

return 0;

system("read -p 'Press Enter to EXIT...' var");
}

Windows에서는 두 번 클릭하면 실행되지만 addition.exeUbuntu(CentOS에서도)에서는 실행 파일을 클릭하면 addition아무 일도 일어나지 않습니다. 터미널을 실행하거나 열지 않습니다. 그러나 ./addition터미널에 입력하면 실행됩니다.

하지만 두 번 클릭하여 실행하고 싶습니다. 어떻게 해야 합니까?

이 파일의 속성은 다음과 같습니다.

"추가" 실행 파일의 속성

또한 "속성 열기" 섹션에는 "터미널에서 열기"와 같은 옵션이 없습니다.

.desktop또한 다음과 같은 파일을 만들어 보았습니다 .

[Desktop Entry]
Name=addition
Type=Application
Exec=/media/smit/D/smits programs of c/projects by code blocks/02U/addition/bin/Debug/addition
Terminal=true

클릭하면 addition.desktop응용 프로그램을 시작하는 동안 오류가 발생했다고 표시됩니다.

또한 이 데스크톱 파일을 /usr/share/applications.

답변1

문제의 핵심은 콘솔 응용 프로그램인 프로그램을 실행하려고 하는데,터미널에 연결되어 있지 않습니다. 터미널에서는 단순히 이름을 불러서 프로그램을 실행할 수 있지만 GUI에서는 콘솔 응용 프로그램을 실행하려면 터미널 창이 나타나도록 명시적으로 지정해야 합니다(특히 Ubuntu Unity와 같은 GNOME 기반 데스크톱의 경우 해당). .

.desktop수행해야 할 작업은 프로그램에 대한 4개 필드가 있는 파일 도 생성해야 한다는 것입니다 . 예는 다음과 같습니다.

[Desktop Entry]
Name=MyProg
Type=Application
Exec=/home/xieerqi/example_directory/hello_world_prog
Terminal=true

CentOS에 대해서는 잘 모르지만 Ubuntu에 관한 한 요구 사항은 .desktop응용 프로그램도 실행 가능해야 한다는 것입니다.사용자 홈 디렉터리 아래의 디렉터리에 있는 경우. 원하지 않는 파일 .desktop등 다른 디렉터리에 있는 파일입니다 /usr/share/applications.

따라서 파일이 제 위치에 있고 .desktop실행 가능하게 되면 프로그램을 실행할 수 있습니다. 중요한 것은 Terminal=true라인이다. 그러면 GUI가 터미널을 시작하고 그곳에서 프로그램을 실행하도록 지시합니다.노트getchar(); : 프로그램이 무언가를 실행하고 즉시 종료하는 경우 프로그램이 종료될 때 터미널 창이 종료되므로 창을 열어두기 위해 일종의 지연이나 호출이 필요합니다 . 이것이 바로 많은 사용자가 "왜 내 프로그램이 실행되지 않는 걸까요?"라고 혼란스러워하는 이유입니다. 프로그램이 실행되는데 실제로는 너무 빨리 종료됩니다.


보충 설명:

  • 을 제거하십시오 system("read -p 'Press Enter to EXIT...' var");. 호출 read은 쉘 내장이며독립 실행형 프로그램이 아닙니다., 예를 들어 셸을 사용할 때만 사용할 수 있음을 의미합니다 bash. C를 사용하는 경우 프로그램에 지연을 추가하려면 scanf()또는 를 올바르게 사용하세요. getchar()이는 해당 라인에 도달하지 않음 return 0;을 의미하므로 (프로그램은 명령문에서 종료됨) 프로그램에 대해 설정한 일시 중지 위치도 유효하지 않습니다.system()return
  • 읽다이 게시물AskUbuntu에서 올바른 파일을 얻는 예는 .desktop다음 링크를 참조하세요.공식 문서.
  • 게으른 느낌이 들고 각 실행 파일에 대한 파일을 만들고 싶지 않다면 .desktop다양한 솔루션이 있습니다.여기. 거기에 스크립트를 게시하기도 했습니다.

관련 정보