우연히, hello world C++ 프로그램과 --shared 플래그로 링크되어 있고 exe 파일이 있습니다. 출력은 segfault입니다. 누군가 그 뒤에 이유를 말해 줄 수 있습니까?C++ 공유 플래그 segfault
방법은 재현 : 이클립스 C의
이표준 C++ 안녕하세요 세계 문제 ++. -> 공유 라이브러리 설정을 설정하여 공유 플래그 상자를 확인하십시오.
빌드 출력 :
하는 모든 건물 파일 : ../app.cpp 호출하기 : GCC C++ 컴파일러 g ++ -O0 -g3 -Wall -c -fmessage 길이 = 0 -fPIC -MMD - MP -MF "app.d"-MT "app.d"을 "app.o" "../app.cpp" 완료 건물 -o : ../app.cpp
건물의 목표 : 응용 프로그램 호출하기 : GCC C++ 링커 g ++
완료 건물 대상 ./app.o -shared -o "응용 프로그램": 응용 프로그램
실행 출력 : 세그먼트 오류
감사 g에서
실행 파일이 아니라 공유 라이브러리를 빌드했습니다. 공유 라이브러리를 실행하려고하면 일반적으로 분할 오류가 발생합니다. 공유 라이브러리를 만들고 싶지 않으면'-shared'를 사용하지 마십시오. –
왜 공유 라이브러리를 실행하면 segFault가 발생할 수 있는지 말해 줄 수 있습니까? 감사합니다 – cppython
@cppython 공유 라이브러리는 엔트리 포인트 (함수 메인)를 필요로하지 않으므로 시스템은 코드에서 실행을 시작할 위치를 알 수 없습니다. 또한 main()을 호출하고 main()이 반환하면 exit()를 호출하는 C 런타임 코드의 실행 가능 링크. –