zthread 라 이브 러 리 (version 2.3.2) 가 gcc 3.4.2 에서 문 제 를 컴 파일 하 는 해결 방법
http://blog.sina.com.cn/s/blog_591f0e6e010008o7.html
http://www.cnblogs.com/moodlxs/archive/2012/10/16/2725329.html
zthread 라 이브 러 리 안내
ZThread 라 이브 러 리 는 POSIX 와 Win 32 시스템 의 C + + 프로그램 을 실행 하기 위해 개 원 된 크로스 플랫폼 고급 대상 지향 스 레 드 와 synchronization 라 이브 러 리 입 니 다.
ZThread 라 이브 러 리 의 홈 페이지:http://zthread.sourceforge.net
최신 버 전 Zthread 원본 다운로드 주소: http://prdownloads.sourceforge.net/zthread/ZThread-2.3.2.tar.gz
ZThread 문서:http://zthread.sourceforge.net/documentation.html
문제 설명
zthread 라 이브 러 리 (version 2.3.2) 는 gcc 3.4.2 에서 컴 파일 되 었 습 니 다. 오 류 는 다음 과 같 습 니 다.
g++ -DHAVE_CONFIG_H -I. -I. -I. -I../include -g -O2 -Wall -DNDEBUG -g -O2 -Wall -DNDEBUG -MT AtomicCount.lo -MD -MP -MF .deps/AtomicCount.Tpo -c AtomicCount.cxx -fPIC -DPIC -o .libs/AtomicCount.o
In file included from vanilla/SimpleAtomicCount.cxx:26,
from AtomicCount.cxx:55:
../include/zthread/Guard.h: In destructor `ZThread::Guard<LockType, LockingPolicy>::~Guard()':
../include/zthread/Guard.h:494: error: there are no arguments to `isDisabled' that depend on a template parameter, so a declaration of `isDisabled' must be available
../include/zthread/Guard.h:494: error: (if you use `-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)
문제 분석
include / zthread / guard. h 보기,
템 플 릿 류 Guard < LockType, Locking Policy > 는 private LockHolder < LockType >, private NonCopyable 에 개인 적 으로 계승 되 었 습 니 다. 템 플 릿 류 LockHolder < LockType > 에 서 는 isDisabled () 방법 을 제 공 했 는데 왜 컴 파일 러 가 인식 되 지 않 습 니까? (GNU gcc / g + 버 전의 문제?)
이것 은 컴 파일 러 컴 파일 러 버 전의 문제 입 니 다. Zthread 의 작 가 는 개발 을 중단 한 지 오래 되 었 습 니 다.
g + + 3.4 이후 버 전의 이름 찾기 방법 은 이전 버 전과 다 릅 니 다. 문 제 는 다음 과 같 습 니 다.http://gcc.gnu.org/onlinedocs/gcc/Name-lookup.html그 러 니까
클래스 Guard < LockType, Locking Policy > 는 private LockHolder < LockType > 에 개인 적 으로 계승 되 고 템 플 릿 류 LockHolder < LockType > 에 isDisabled () 방법 을 제공 합 니 다. 그러나 g + + 는 이후 3.4 이후 부모 템 플 릿 류 의 isDisabled () 방법 을 찾 을 수 없 으 며, zthread 라 이브 러 리 는 시간 과 함께 수정 되 지 않 아 새로운 버 전의 g + + 컴 파일 에 실 패 했 습 니 다.
해결 방법
요컨대 3.4 이후 버 전의 g + + 에서 이름 을 찾 을 때 템 플 릿 클래스 에서 기본 클래스 방법 이나 기본 클래스 의 구성원 변 수 를 호출 합 니 다. 이 기본 클래스 방법 이나 기본 클래스 의 구성원 변 수 는 템 플 릿 매개 변수 형식 (type: name T) 과 무관 합 니 다.
방법 1:
this - > 호출 또는 클래스 정의 에서 using BaseClass < T >: function () 을 사용 해 야 합 니 다.
방법 2: (참고)
먼저 export CXXFLAGS = - permissive 를 한 다음 에 실행 합 니 다.
./configure
make
make install
방법 1 대 zthread 2.3.2 의 수정
1)include/zthread/Guard.h
494 if(!this->isDisabled())
2)
src/MutexImpl.h
156 this->ownerAcquired(self);
167 this->waiterArrived(self);
176 this->waiterDeparted(self);
195 this->ownerAcquired(self);
239 this->ownerAcquired(self);
256 this->waiterArrived(self);
265 this->waiterDeparted(self);
287 this->ownerAcquired(self);
329 this->ownerReleased(impl);
[yasi] make install 이후 zthread 의 라 이브 러 리 파일 은
/usr/local/lib/libZThread.so
/usr/local/lib/libZThread.a
에 자리잡다,...
/usr/local/include/zthread
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.