2012-08-25 6 views
3

다시 또 다른 문제가 있습니다. 이번에는 .dll, .qrc (QT Resource) 파일이 포함 된 공유 라이브러리가 있는데 문제는 라이브러리의 리소스 중 하나에 액세스하려고 할 때 작동하지 않는다는 것입니다. 구현 시도 :공유 라이브러리 QT 리소스

Q_INIT_RESOURCE(resourcefilename) 

여전히 작동하지 않습니다. ("qInitResources_resourcefilename()"을 찾을 수 없음)

답변

4

Nevermind. 해결책을 찾았습니다. qInitResources_name()을 (를) 찾을 수 없습니다. 그래서 공유 라이브러리 안에서 함수를 만들었습니다.

int RmiLib::startResources(){ 
    extern int qInitResources_rmi(); 
    return qInitResources_rmi(); 
} 

그런 다음 메인 App에서 함수를 호출했습니다. 그것은 효과가 있었다. 당신이 그냥 함수 qInitResources_resourcefilename 찾을 수없는이 같은 문제로 실행

.dll 인이 말 때문에 Windows를 사용한다고 가정하기 위하여려고하고있다

1

. 이 함수는 라이브러리에 .qrc 파일이 있으면 공유 라이브러리에 실제로 존재합니다 (맵 파일 확인). 문제는이 함수를 내 보내지 않았기 때문에 링커가 주 앱을 연결하는 동안 해당 함수를 찾지 못한다는 것입니다. qInitResources_resourcefilename 함수를 다음과 같이 공유 라이브러리의 익스포트 테이블에 추가했습니다.

LIBRARY 
EXPORTS 
    qInitResources_resourcefilename 

QMAKE_LFLAGS += /DEF:\"$${PWD}\\export.def\" 
OTHER_FILES += \ 
    export.def 

귀하의 솔루션이 문제를 해결 작동 파일 .PRO 당신의 공유 라이브러리에 다음을 추가 export.def 공유 라이브러리에 새 파일을 추가 RmiLib 때문에 :: startResources는 내보내기 테이블에 포함됩니다.

Windows 7, MSVC 2010, Qt 5.2.0

+0

감사합니다! 이게 도움이됩니다! – alanwsx