다음은 컴파일 명령입니다.
g++ nomain.cpp -Wl,-e,_mainClass -v
-Wl,-e,_mainClass 이거는 링커에게 -e _mainClass 옵션을 전달 하라는 명령 입니다.
이걸 이용해서 스태틱 변수를 엔트리 포인트로 지정을 해서 움직이게 하기는 했습니다만... 되는 이유는 정확히 모르겠네요.
아마도 mainClass의 주소와 NoMain 클래스의 컨스트럭터의 주소가 일치하기 때문에 동작하는게 아닌가 생각할 뿐 입니다.
실험을 해보지 않았지만 컨스트럭터 위에 다른 메소드가 들어가거나 하면 동작하지 않을 확률이 높다고 생각합니다.
main 이 링크되는
main 이 링크되는 라이브러리에 있는 프레임워크일 가능성도 있습니다.
아마
엔트리 포인트를 어떻게 세팅하느냐에 따라서도 달라질 수 있겠죠...
조금 더
자세하게 설명 해주시면 안될까요??
잘 이해가 안되네요..
main이 없으면
main이 없으면 시작점을 찾지 못해서 실행이 불가능할 것입니다.
제 생각에 윗분들 말씀은 라이브러리나 다른 곳에 main함수가 있을껏 같다는 말씀 같습니다.
============================
A watched pot never boils.
============================
A watched pot never boils
음..
main이 있는 클래스에서 , 이 main없는 클래스의 역할을 객체로써 가져다가 쓴다고 해야할까요...
-_-a 알고 있음을 표현하기가 힘들군요;
nm으로 확인하세요.
find . -name "*.o" -exec nm -A {} \; | grep -w main
으로 나오는 object 파일을 생성해내는 소스에 있습니다.
---
http://coolengineer.com
global variable
설마 이런 경우인 지는 모르겠으나... (서얼마~)
Global Variable 형태로 class의 instance를 만들면 그 class의 constructor를 main함수 대용으로 사용할 수 있습니다.
하지만 link할 때 묘기를 좀 부려야 될 듯한 느낌이~
Taeho Oh ( ohhara@postech.edu , ohhara@plus.or.kr ) http://ohhara.sarang.net
Postech ( Pohang University of Science and Technology ) http://www.postech.edu
Digital Media Professionals Inc. http://www.dmprof.com
Taeho Oh ( ohhara@postech.edu ) http://ohhara.sarang.net
Postech ( Pohang University of Science and Technology ) http://www.postech.edu
Alticast Corp. http://www.alticast.com
저도 이 경우가
저도 이 경우가 아닌가 싶습니다.
예전에 봤던거라 가물한데, 객체 하나 달랑 있는, 생성자가 실제 main인 코드보고 덜덜덜했던 기억이 납니다.
(근데 그때 main에서 객체를 생성했었던건지, 전역변수로 하나 생성했었던건지가 확실치않네용^^;)
--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)
--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)
설마 이런 경우...
WinMain함수가 있지는 않은가요? ^^
사실 main 함수가
사실 main 함수가 프로그램 시작할때 불리는 것은..
링커가 실행파일을 만들 때, main 함수를 call 하도록 파일을 생성해서 그렇게 됩니다.
컴파일 과정에서 일반적인 링커를 사용하지 않고, 수동으로 실행파일을 만들면 main 함수가 아닌 다른 함수를 콜할수도 있고, 아니면 아예 새로운 방식을 정의하는 것도 불가능 한 것은 아닙니다.
making smallest elf excutable 이던가 하는 문서를 구글링해서 보시면 금방 이해하실 수 있을 것입니다.
다만~
이 경우는 왠지 컴파일 중간에 프레임웍이나 라이브러리에 메인 함수가 포함되어 있을 확률이 높다는 생각이 듭니다.
이렇게 하면 되기는 합니다.
그누 씨뿔뿔을 사용하는 경우에 링커 옵션을 이용하면 클래스의 컨스트럭터를 엔트리 포인트로 지정해서 동작하게 할 수 는 있습니다.
이리저리 시도해서 어찌어찌 되기는 했는데...
왜 이게 되는지 100% 이해는 못하겠네요
nomain.cpp
#import
class NoMain
{
public:
NoMain()
{
std::cout << "Hello World!" << std::endl;
exit(0);
}
} mainClass;
다음은 컴파일 명령입니다.
g++ nomain.cpp -Wl,-e,_mainClass -v
-Wl,-e,_mainClass 이거는 링커에게 -e _mainClass 옵션을 전달 하라는 명령 입니다.
이걸 이용해서 스태틱 변수를 엔트리 포인트로 지정을 해서 움직이게 하기는 했습니다만... 되는 이유는 정확히 모르겠네요.
아마도 mainClass의 주소와 NoMain 클래스의 컨스트럭터의 주소가 일치하기 때문에 동작하는게 아닌가 생각할 뿐 입니다.
실험을 해보지 않았지만 컨스트럭터 위에 다른 메소드가 들어가거나 하면 동작하지 않을 확률이 높다고 생각합니다.
댓글 달기