링크 에러... 왜 못찾는 것일까..
라이브러리를 덤프했을때 외부 기호가 extenral로 함수 이름이 정확히 있었다...
그러면 보통 라이브러리만 링크해도 문제가 없어야 하는데..
도저히 못할줄 알았지만
다행히 공식 문서와 stackoverflow를 통해 해결할 수 있었다.
원인은 함수 기호 이름의 문제였다.
내가 작업하는 솔루션은 cpp이지만, 라이브러리로 만들어 사용하려는 솔루션은 모두 C 파일이다...
여기서 아는 사람은 cpp의 name mangling에 대해 알고 있을것이다.
C 언어와 cpp 언어는 다르며 해당 규약들과 이름에 대해 다르기때문에 똑같이 맞춰줄 필요가 있다...
C++ 프로그램에서 런타임 라이브러리 함수를 사용할 수 있도록 하는 구문인 extern "C" 를 사용해서 간단히 해결할 수 있었다. C로 컴파일된 파일에 정의된 기호는 extern "C" 수식어 를 사용하지 않는 한 C++ 파일에 선언된 기호와 데코레이팅된 이름이 다르니 주의하자.
그래서 C 헤더파일의 내용에 extern "C" 를 사용하여 c++ 파일에 선언된 기호와 맞춰주면 해결된다.
'C , C++, C#' 카테고리의 다른 글
[Visual Studio] 릴리즈 바이너리 디버깅하기 (0) | 2022.12.07 |
---|---|
[Visual Studio 2022] VS 2022 크로스 플랫폼 빌드: CMakepprest.json (0) | 2022.11.07 |
[Visual Studio] 라이브러리 덤프하기 (0) | 2022.09.05 |
[C++] restrict keyword: AMP(Accelerated Massive Parallelism) (0) | 2022.07.04 |
복잡한 선언 읽기: C / C++ (0) | 2022.06.21 |