보관 파일에 C 라이브러리가 있습니다 (clib.a
). 나는 그것을 위해 cpp.o
을은 C++ 래퍼를 작성했습니다, 그리고 정적 라이브러리로 사용하고 싶습니다 :링크 된 개체의 전역 심볼 범위 제한
ar cTrvs cppwrap.a clib.a cpp.o
코드를 직접 정확하지 않는 clib.a
에서 물건을 사용할 수 없습니다이로 연결 헤더가 포함됩니다. 그러나 누군가가 우연히 적절한 프로토 타입을 만듭니다 (예 : void myCoincidentallyNamedGlobalFunction()
- 이 인 myCoincidentallyNamedGlobalFunction
의 정의가 적용될 것입니다. clib.a
에서 기호 이후
만 cpp.o
에 액세스하고, cppwrap.a
에 연결되지 아무것도 할 필요가, (그래서 심지어는 실패 할 것 CLIB 헤더를 포함)에는 가능한 충돌이 없도록 완벽하게 숨길 수있는 방법은 무엇입니까?
'clib.o'는 스스로 만들고있는 것입니까, 아니면 랩핑하고 싶은 다른 사람이 건네주는 모 놀리 식 바이너리입니까? – Jeff
@ 제프 나는 그것을 짓고있다. 그렇다. – delicateLatticeworkFever
그래서 몇 가지 옵션이 있다고 생각합니다. 익명의 네임 스페이스에서 내보내기를 원하지 않는 메소드/변수를 숨길 수 있습니다.이 방법은 아마도 가장 깨끗한 방법 일 수 있습니다. 또는 최종 분산에서 노출시키지 않으려는 심볼을 수동으로'strip -N' 또는'objcopy -N' 심볼로 만들 수 있습니다 도서관. – Jeff