2008-09-26 4 views
1

g ++ 3.3.4로 공유 라이브러리를 구축 중입니다. 나는이 hash_map을 사용하여에서 온 거라고 생각 공유 라이브러리에 연결할 수 없습니다.

std::_Rb_tree<unsigned int, unsigned int, std::_Identity<unsigned int>, std::less<unsigned int>, std::allocator<unsigned int> >::insert_unique(unsigned int const&) 

로의 C++의 여과 및 설명
./BcdFile.RHEL70.so: undefined symbol: _ZNSt8_Rb_treeIjjSt9_IdentityIjESt4lessIjESaIjEE13insert_uniqueERKj 

을 얻고 있기 때문에 라이브러리에 링크 할 수 없습니다,하지만 난 찍은 모든 출력 및 정규 std :: map으로 전환했습니다. g ++을 사용하여 연결을 수행합니다 ( -lstdc++ 포함).

누구나 어떤 템플릿이이 템플릿을 인스턴스화하는지 알 수 있습니까? 아니면 어떤 라이브러리를 연결해야합니까?

편집 : 추가 검토 후 컴파일이 발생했을 때 -frepo 플래그가 추가 된 것처럼 보이지만 불행히도 그 플래그는 gcc3.3 버그를 해결합니다.

+0

그럼, 알아 냈어? – Dima

답변

1

std::_Rb_Tree은 빨간색 - 검은 색 트리가 될 수 있습니다. map을 사용했을 가능성이 큽니다. 라이브러리가 응용 프로그램과 다른 버전 libstdc++에 연결되어 있지 않은 한 libstdc++의 일부 여야합니다. 지금까지 말한 것에서는 가능성이 희박합니다.

편집 : 빨간색 검정색 트리는 map의 기본 데이터 구조입니다. 그 모든 hash_map 않는 원시 값을 사용하는 대신 그것을 사용하기 전에 해시 키입니다.

0

맵을 사용하는 소스 파일에서

#include < map >
을 시도하십시오.

+0

#include가 누락되면 링크 시간 오류가 아닌 컴파일 시간 오류가 발생합니다. – KeithB

+0

한 번 비슷한 오류가 발생했습니다. #include < map >을 추가하면 다른 포함의 일부 였지만 수정했습니다. 나는 그것이 무엇인지 알지 못했습니다. std :: map의 인스턴스 생성에 문제가 있었어야합니다. 당신 말이 맞아요. 그러나 템플릿을 사용하면 모든 종류의 이상한 오류가 발생할 수 있습니다. – Dima

+0

충돌이 발생했습니다. 에는 일반적으로 다른 헤더가 포함되어 있으므로 실제로 문제가 될 수 있습니다. std :: map <>은 과 공유되는 기본 헤더에서 매우 잘 선언 될 수 있으며, 으로 정의됩니다. 따라서 만 포함한다면 std :: map 선언을 얻을 수 있습니다. (수 - 컴파일러에 따라 다름) – MSalters

0

서로 다른 버전의 libstdC++. gcc가 서로 다른 것으로 보입니다. 경로를 확인하십시오.

관련 문제