아마 컴파일단계에서 name mangling으로 함수명이 이상하게 변형되면서 링크할때 링커가 이를 못알아본듯 합니다.
so 등등 공유라이브러리의 인터페이스가 되는 함수(export되서 외부에서 호출되는 함수)들은 무조건 C스타일이어야만 합니다.
C스타일로 바뀌면 이런건 안됩니다.
- 특정 클래스의 메소드를 함수로 export 하기
- 오버로딩된(이름은 같은데 인수의 타입이나 갯수가 다른) 함수 2개이상을 동시에 export 하기
- 클래스를 인수로 주고받기 => void 포인터로 바꾸는 어거지 방법으로 주고받는건 되긴 하지만 이때는 프로그램이 이유없이 이상하게 돌아갈 위험 있음. 특히 컴파일러 종류나 버전이 다를 경우.
extern "C" 안하신거 같네요.
extern "C" 안하신거 같네요.
아마 컴파일단계에서 name mangling으로 함수명이 이상하게 변형되면서 링크할때 링커가 이를 못알아본듯 합니다.
so 등등 공유라이브러리의 인터페이스가 되는 함수(export되서 외부에서 호출되는 함수)들은 무조건 C스타일이어야만 합니다.
C스타일로 바뀌면 이런건 안됩니다.
- 특정 클래스의 메소드를 함수로 export 하기
- 오버로딩된(이름은 같은데 인수의 타입이나 갯수가 다른) 함수 2개이상을 동시에 export 하기
- 클래스를 인수로 주고받기 => void 포인터로 바꾸는 어거지 방법으로 주고받는건 되긴 하지만 이때는 프로그램이 이유없이 이상하게 돌아갈 위험 있음. 특히 컴파일러 종류나 버전이 다를 경우.
Written By the Black Knight of Destruction
댓글 달기