2011-09-22 4 views
2

C++ 프로그램에서 호출해야하는 c lib, algo.lib가 있습니다. algo.lib의 변수는 정적입니다. algo.lib를 여러 번 호출하거나 스레드를 사용하여 algo.lib를 동시에 호출하면 C++ 프로그램에서 문제가 발생합니다.c lib는 C++ 프로그램에서 정적입니까?

예를 들어, algo.lib에는 int a이 있는데 이니셜은 0으로 설정됩니다. 처음 algo.lib을 호출하면 처음으로 1000이 설정됩니다. 그러나 algo.lib을 또 한 번 호출하면, algo.lib의 변수가 초기 상태, 즉 a = 0이고 a = 1000이 아니길 원합니다.

algo.lib을 객체 지향적으로 만들 수 있으므로 호출 할 때 그것의 기능, 그것은 객체로 생성되고 초기 상태로 설정되어 있는가? 그리고 algo.lib 실행 완료 후,이 객체는 파괴됩니까?

답변

4

예, 가능합니다. 이 경우 을 다시 작성하십시오. 바이너리 만있는 경우이 동작을 변경할 수 없습니다. 원하는대로 실행하고 종료 할 별도의 실행 파일을 작성하여 해결할 수 있으며 결과를 일부 IPC를 통해 주 프로그램으로 다시 전달할 수 있습니다. 기본적으로 각 개별 호출에 대해 라이브러리를 효과적으로 초기화하는 자체 구현으로 랩핑하십시오.

+0

이 algo.lib는 다른 누군가의 것으로 속하기 때문에 다시 작성하는 것은 매우 지루하고 시간이 오래 걸립니다. 고마워, 제안을 주셔서 감사합니다, 나는 대신 algo.lib을 컴파일 할 수 있다고 생각합니다. 대신 C++ 프로그램에서 popen()을 사용하여 호출하십시오. – Michael

+0

필요 없습니다. 기존 라이브러리를 올바르게 초기화하고/또는 자체 함수를 래핑하는 자체 API를 작성하십시오. 이전 API 대신 새 API를 호출하십시오. 'popen()'은 이것에 대해 과잉이다. – spraff

+0

@spraff, 네가 옳은지 잘 모르겠다. OP에는 라이브러리의 전역 변수가 있으며 각 호출에서 변경되며 분명히로드 된 후에는 다시 설정할 수 없으며 외부에서는 액세스 할 수 없습니다. 그렇다면 API를 래핑하면 도움이되지 않습니다. – littleadv

관련 문제