저는 C++ 실행 파일을 만들고 있습니다. 나는 사용자 정의 라이브러리를 포함하여 내가 사용하고있는 C 및 C++ 라이브러리를 정적으로 연결하고있다. (그러나 사용중인 모든 라이브러리를 정적으로 연결하지는 않습니다.)내 실행 파일의 .dynstr에 정적으로 링크 된 라이브러리의 기호가 들어있는 이유는 무엇입니까?
실행 파일을 고려하더라도 비정상적으로 큰 것으로 보입니다. 내가 .dynstr
에서 내가 예상했던 것보다 훨씬 더 많은 공간을 사용하고 있다고 말해 준 objdump -h
을 사용했습니다. 내가 -Os
컴파일 및 strip
을 실행하지만
$ readelf -p .dynstr slamshift
을 실행할 때 내가 정적으로 링크 한 라이브러리 (내 자신의 라이브러리에서 심볼
[ 13588] _ZN3yuu6windowC2Ev
[ 1359b] _ZTSN3yuu7gfx_ctxE
[ 135ae] _ZN4YAML7Scanner11ScanFlowEndEv
[ 135ce] __glewVertexFormatNV
같은 많은 항목을 얻을 것 yaml- cpp 및 GLEW).
이러한 기호가 내 실행 파일에 나타나는 이유는 무엇입니까? 관련된 라이브러리를 정적으로 링크 한 경우 심볼 이름이 불필요하지 않아야합니까?
우분투 12.04, GCC 4.6.3 및 CMake와 기본 설정을 사용하여 관련성이있는 경우 빌드합니다.
실제로 문제는 기본적으로 -rdynamic을 포함하는 CMake로 밝혀졌으며 대부분의 다른 링커 플래그보다 우선합니다. –