2013-04-04 3 views
2

У меня есть проект, предназначенный как lib и еще один как приложение.Qt link static built lib

Первый проект успешно строит как статического и как динамического (совместно) Lib.

Второй проект успешно связывает динамический LIB, но он не может связать статический один. Появляется много сообщений об ошибках, таких как LNK2001: unresolved external symbol.

app.pro:

TEMPLATE = app 
CONFIG += static link_prl ordered 
DEFINES += QT_NODLL 
QT += core gui network xml 

... 

# --- LINK QUAZIP LIB SHARED --- 

#LIBS += -L$$quote(C:/Qt/quazip/build-quazip-0.5.1-Qt_4_8_3_shared-Debug/quazip/debug) -lquazip 
#PRE_TARGETDEPS += $$quote(C:/Qt/quazip/build-quazip-0.5.1-Qt_4_8_3_shared-Debug/quazip/debug/quazip.lib) 

# --- LINK QUAZIP LIB STATIC --- 

LIBS += -L$$quote(C:/Qt/quazip/build-quazip-0.5.1-Qt_4_8_3_static-Release/quazip/release) -lquazip 
PRE_TARGETDEPS += $$quote(C:/Qt/quazip/build-quazip-0.5.1-Qt_4_8_3_static-Release/quazip/release/quazip.lib) 

Справочники Содержание:

Directory of C:\Qt\quazip\build-quazip-0.5.1-Qt_4_8_3_shared-Debug\quazip\debug 

04.04.2013 11:01 <DIR>   .           
04.04.2013 11:01 <DIR>   ..           
04.04.2013 11:01   188 498 JlCompress.obj        
04.04.2013 11:01    2 484 moc_quagzipfile.cpp       
04.04.2013 11:01   43 994 moc_quagzipfile.obj       
04.04.2013 11:01    2 501 moc_quaziodevice.cpp       
04.04.2013 11:01   44 026 moc_quaziodevice.obj       
04.04.2013 11:01    2 467 moc_quazipfile.cpp       
04.04.2013 11:01   62 441 moc_quazipfile.obj       
04.04.2013 11:01   40 936 qioapi.obj         
04.04.2013 11:01   24 586 quaadler32.obj        
04.04.2013 11:01   24 554 quacrc32.obj         
04.04.2013 11:01   73 276 quagzipfile.obj        
04.04.2013 11:01   69 745 quaziodevice.obj        
04.04.2013 11:01   188 928 quazip.dll         
04.04.2013 11:01   40 067 quazip.exp         
04.04.2013 11:01   999 808 quazip.ilk         
04.04.2013 11:01    381 quazip.intermediate.manifest     
04.04.2013 11:01   65 678 quazip.lib         
04.04.2013 11:01   156 746 quazip.obj         
04.04.2013 11:01   1 166 336 quazip.pdb         
04.04.2013 11:01   259 653 quazipdir.obj        
04.04.2013 11:01   117 317 quazipfile.obj        
04.04.2013 11:01   47 039 quazipfileinfo.obj       
04.04.2013 11:01   57 489 quazipnewinfo.obj       
04.04.2013 11:01   35 483 unzip.obj         
04.04.2013 11:01   34 526 zip.obj          
       25 File(s)  3 748 959 bytes         
       2 Dir(s) 17 125 515 264 bytes free 

Directory of C:\Qt\quazip\build-quazip-0.5.1-Qt_4_8_3_static-Release\quazip\release 

04.04.2013 12:46 <DIR>   .            
04.04.2013 12:46 <DIR>   ..            
04.04.2013 12:46   1 457 363 JlCompress.obj         
04.04.2013 12:46    2 484 moc_quagzipfile.cpp        
04.04.2013 12:46   1 084 653 moc_quagzipfile.obj        
04.04.2013 12:46    2 501 moc_quaziodevice.cpp        
04.04.2013 12:46   1 084 461 moc_quaziodevice.obj        
04.04.2013 12:46    2 467 moc_quazipfile.cpp        
04.04.2013 12:46   1 199 125 moc_quazipfile.obj        
04.04.2013 12:46   1 084 170 qioapi.obj          
04.04.2013 12:46   279 307 quaadler32.obj         
04.04.2013 12:46   279 270 quacrc32.obj          
04.04.2013 12:46   1 115 174 quagzipfile.obj         
04.04.2013 12:46   1 108 222 quaziodevice.obj         
04.04.2013 12:46  14 977 872 quazip.lib          
04.04.2013 12:46   1 246 009 quazip.obj          
04.04.2013 12:46    801 quazip.prl          
04.04.2013 12:46   1 357 090 quazipdir.obj         
04.04.2013 12:46   1 246 159 quazipfile.obj         
04.04.2013 12:46   1 121 490 quazipfileinfo.obj        
04.04.2013 12:46   1 134 685 quazipnewinfo.obj        
04.04.2013 12:46   56 712 unzip.obj          
04.04.2013 12:46   59 090 zip.obj           
       21 File(s)  29 899 105 bytes          
       2 Dir(s) 17 123 479 552 bytes free 

Как я понимаю, QMAKE хочет DLL, чтобы ссылка на него. Как я могу сказать, что хочу создать статическое приложение и позволить ему искать внешние элементы внутри статической встроенной библиотеки?

ответ

2

Для связи QuaZip статически необходимо CONFIG += staticlib в вашем файле qmake.

Или убедитесь, что QUAZIP_STATIC определен до того, как вы включили любой заголовок QuaZip из своего приложения.

+0

TEMPLATE = приложение CONFIG + = статическое + staticlib link_prl приказал DEFINES + = QT_NODLL QT + = основной графический интерфейс сети XML ничего не изменилось. – adnako

+0

Из официальных документов: Скомпилируйте его как статическую библиотеку, используя параметр CONFIG + = staticlib qmake. В этом случае QUAZIP_STATIC определяется автоматически qmake. И это для проекта QuaZip. Не для приложения, которое использует qua zip.lib – adnako

+0

Просто добавлено DEFINES + = QUAZIP_STATIC в ** приложение **. Большое спасибо! – adnako