programing

C 연결 오류: 'main'에 대한 정의되지 않은 참조

closeapi 2023. 6. 15. 21:52
반응형

C 연결 오류: 'main'에 대한 정의되지 않은 참조

저는 이 주제에 대한 다른 답변들을 읽었지만, 안타깝게도 그들은 저를 도와주지 않았습니다.여러 c 프로그램을 함께 연결하려고 하는데 다음과 같은 오류가 발생합니다.

$ gcc -o runexp.o scd.o data_proc.o -lm -fopenmp
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: ld returned 1 exit status
make: * [runexp] Error 1

저는 정확히 하나의 주요 기능을 가지고 있고 그것은 runexp에 있습니다.양식은

int main(void) {
    ...; 
    return 0;
}

이 오류가 발생할 수 있는 이유에 대한 의견이 있으십니까?감사합니다!

다음 뒤에 출력 파일 이름을 제공해야 합니다.-o선택.당신의 경우에는runexp.o입력 객체 파일이 아닌 출력 파일 이름으로 처리되므로main함수가 정의되지 않았습니다.

다음을 포함하는 C 파일을 포함하지 않습니다.main()컴파일할 때 링커가 보지 않도록 합니다.

추가해야 합니다.

$ gcc -o runexp runexp.c scd.o data_proc.o -lm -fopenmp

개체 파일을 덮어쓰고 있습니다.runexp.o다음 명령을 실행합니다.

 gcc -o runexp.o scd.o data_proc.o -lm -fopenmp

사실, 그.-o출력 파일용입니다.실행해야 합니다.

gcc -o runexp.out runexp.o scd.o data_proc.o -lm -fopenmp

runexp.out이 이진 파일이 됩니다.

일반적으로 대부분의 .c 파일은 다음과 같은 방법으로 컴파일합니다.

gcc foo.c -o foo.사용한 #에 포함된 항목이나 외부 .h 파일이 있는지 여부에 따라 달라질 수 있습니다.일반적으로 C 파일은 다음과 같이 나타납니다.

#include <stdio.h>
    /* any other includes, prototypes, struct delcarations... */
    int main(){
    */ code */
}

일반적으로 '정의되지 않은 main 참조'가 표시되면 다음을 포함하지 않는 .c 파일이 있음을 의미합니다.int main()서류철에만약 당신이 자바를 처음 배웠다면, 이것은 이해할 수 있는 혼란의 방식입니다. 왜냐하면 자바에서 당신의 코드는 보통 다음과 같이 보이기 때문입니다.

//any import statements you have
public class Foo{
    int main(){}
 }

당신이 가지고 있는지 확인해 보는 것이 좋습니다.int main()맨 위에

ld 링커 오류:undefined reference to `main'C++에서:

저는 이 질문이 C에 관한 것이라는 것을 알고 있지만, 만약 당신이 여기서 우연히 C++로 컴파일하고 있다면, 그것은 당신이 자신의 질문을 가지고 있기 때문일 수 있습니다.main()네임스페이스 내부의 함수입니다.네임스페이스 외부로 이동하면 이 오류가 해결됩니다!

예:

will_not_run.cpp:

#include <iostream>

// <========== comment out the namespace (this lines plus the opening and 
// closing braces) to make this program link!
namespace my_module
{

int main()
{
    std::cout << "hello world!\n\n";

    return 0;
}

} // namespace my_module

다음 명령을 사용하여 빌드 및 실행을 시도할 경우:

time g++ -Wall -Wextra -Werror -O3 -std=gnu++17 will_not_run.cpp \
    -o will_not_run && will_not_run

...다음 오류가 발생합니다.

/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
collect2: error: ld returned 1 exit status

이 문제를 해결하려면 네임스페이스를 삭제하거나 이동하십시오.main()그 밖에서, 그리고 그것은 다시 잘 작동합니다!

#include <iostream>

int main()
{
    std::cout << "hello world!\n\n";

    return 0;
}

액세스해야 하는 경우my_module내부 네임스페이스main()기능, 단순히 명시적으로, 그리고 그것을 사용합니다.my_module::my_func()뭐든, 뭐든, 아니면 전화.using namespace my_module;사용자의 네임스페이스 콘텐츠에 액세스할 수 있는 범위입니다.main()기능.

언급URL : https://stackoverflow.com/questions/15905119/c-linking-error-undefined-reference-to-main

반응형