2012-05-25 1 views
0

정적 변수가 들어있는 cpp 파일 (헤더 파일이 없어야 함)이 있습니다. 이러한 정적 변수는 Visual Studio 2008 컴파일러에서 무시됩니다. 어떻게 해결할 수 있습니까?정적 라이브러리 (Visual Studio)에서 cpp 파일의 강제 연결

자세한 내용 : 나는 정적 필드 allInstances이있는 추상 클래스를

  • ; 내 클래스의 "concretee"인스턴스가 생성되면 (cpp 파일에있는 정적 변수가 인스턴스화 될 때 발생합니다),이 인스턴스에 대한 포인터가 allInstances에 push_back됩니다.
  • Cpp 파일에는 내 추상 클래스에서 파생 된 클래스가 포함되어 있습니다. 그들의 구현은 allInstances를 통해서만 호출 될 수 있기 때문에 cpp 파일에 있어야한다.
  • 내 추상 클래스 cpp 파일은 정적 라이브러리에서 컴파일되는 폴더 (프로젝트)에있다.
  • 이 정적 라이브러리는 프로젝트에서 사용된다. xll을 컴파일하는 파일

cpp 파일이 xll 프로젝트에있을 때 모든 것이 잘되었습니다. 하지만 엑셀이 유일한 인터페이스가 아니기 때문에 별도의 폴더에 cpp 파일을 옮겼을 때 정적 변수가 더 이상 인스턴스화되지 않습니다.

나는

어떤 아이디어 .... 프로젝트가 좋지 않을까 등 XLL, EXE, PYD, DLL, 각각으로 이러한 CPP 파일의 많은 그들 모두를 포함 있나요? 미리 감사드립니다.

+0

MSVS에서 작업 한 지 오래되었지만 사용하지 않은 개체를 제거하는 옵션이 설정되지 않았는지 확인 했습니까? 설정되어 있고 컴파일러가 정적 변수에 대한 참조를 알아 내지 못하면 제거 될 수 있습니다. 또한 객체를 '휘발성 (volatile)'으로 시험해 볼 수도 있습니다. – ysap

답변

1

해당 오브젝트 파일이 프로그램의 일부임을 링커에 알려줘야합니다. 일반적으로이 작업은 라이브러리에 저장하는 대신 오브젝트 파일로 지정하여 수행합니다. 정의에 따르면, 라이브러리의 오브젝트 파일은 외부 참조를 해석하는 경우에만 프로그램의 일부가됩니다.

+0

내 질문에 답해 주셔서 감사합니다. 그러나 나는 완전히 이해하고 있는지 잘 모르겠습니다. 이 cpp 파일은 여러 프로젝트 (xll 프로젝트, pyd 프로젝트, exe 프로젝트 ...)에 필요하기 때문에 별도의 라이브러리에 포함시켜야합니다. 그렇지 않습니까? cpp 파일 만 변경할 수 있습니까 (예 : 'extern', 'volatile'...). 아니면 별도의 라이브러리에 이러한 cpp 파일을 보관하려면 헤더 파일이 필요합니까? 가장 쉬운 (최소 ib 코드 볼륨) 방법은 무엇입니까? –

+0

정의에 따라 파일을 라이브러리에 저장하면 정의되지 않은 외부를 해결하는 파일 만 사용하도록 링커에 요청합니다. 그것이 도서관이하는 것입니다. 그것이 당신이 원하는 것이 아니라면, 도서관은 당신이 찾고있는 해결책이 아닙니다. 모든 사람들이 찾을 수있는 디렉토리에 넣어 두십시오. –

+0

정말로 라이브러리를 원한다면 각 소스에서 파일 이름을 기반으로 이름을 사용하여 외부 기호를 정의한 다음이 기호의 주소 테이블을 자동으로 생성하고 전역 이름을 지정하십시오. 그러면 클라이언트는 어떻게 든 테이블을 참조하며, 테이블이 참조하는 모든 것을 자동으로 가져옵니다. –

관련 문제