2015-10-16 52 views
2

我從我的程序鏈接到zbar。我已經使用mingw/msys構建了zbar。我的應用程序是使用Qt Creator構建的。靜態鏈接到libzbar.a時出錯:未定義引用到_imp__GetACP @ 0

當我使用libzbar.dll.a動態鏈接到zbar時,它編譯並運行正常。當我鏈接到libzbar.a,構建我的應用程序失敗,出現鏈接錯誤:

C:/Qt/Tools/mingw491_32/bin/../lib/gcc/i686-w64-mingw32/4.9.1/../../../../i686-w64-mingw32/lib/../lib/libiconv.a(localcharset.o):localcharset.c:(.text+0x7): undefined reference to `[email protected]' 
collect2.exe: error: ld returned 1 exit status

這令人費解的路徑 - C:/Qt/Tools/mingw491_32/bin/../lib/gcc/i686-w64-mingw32/4.9.1/../../../../i686-w64-mingw32/lib/../lib/libiconv.a - 解析爲C:\Qt\Tools\mingw491_32\i686-w64-mingw32\lib\libiconv.a。所以看起來Qt Creator試圖鏈接自己的libiconv.a,它缺少一些libzbar.a需要使用的功能。

我不知道如何讓Qt Creator中使用MSYS libiconv.a,我嘗試這樣做:

LIBS += c:/mingw/lib/libiconv.a 
LIBS += $$PWD/zbar/lib/libzbar.a 

但它沒有任何效果,我得到了同樣的錯誤。我如何說服Qt Creator使用c:/mingw/lib/libiconv.a而不是自己的版本?

編輯:這裏是再現錯誤最小代碼:

#define NULL 0 
#include <zbar.h> 
int main() 
{ 
    zbar::ImageScanner scanner; 
    return 0; 
} 

而在.pro文件,我有:

INCLUDEPATH += c:/MinGW/msys/1.0/local/include 
LIBS += -Lc:/MinGW/msys/1.0/local/lib -lzbar 
+0

您是否試圖與'的win32:LIBS + = C :/ MinGW的/ lib目錄/ libiconv.a'?甚至是'PRE_TARGETDEPS + = c:/ mingw/lib/libiconv.a'。 – skypjack

+0

@skypjack感謝您的輸入。我試了兩次,但錯誤仍然沒有改變。 – sashoalm

+0

這將有助於讓項目文件或假項目重現錯誤,您是否可以提供其中至少一項? – skypjack

回答

1

的.pro文件喜歡嘗試如下:

TEMPLATE=app 
TARGET=appname 
SOURCES=main.cpp 
PRE_TARGETDEPS += c:/MinGW/msys/1.0/local/lib/libzbar.a 
PRE_TARGETDEPS += c:/MinGW/msys/1.0/local/lib/libiconv.a 
INCLUDEPATH += c:/MinGW/msys/1.0/local/include 
win32:LIBS += c:/MinGW/msys/1.0/local/lib/libzbar.a 
win32:LIBS += c:/MinGW/msys/1.0/local/lib/libiconv.a 
// ... continue 
+0

OMG它的工作!謝謝,我會獎賞你的獎勵,但我不能在21個小時過後才能獲獎。 – sashoalm

+0

好吧,不要忘記它,這是我的第一個賞金!我會盡快回復... :- – skypjack

+0

... ping ... :-) – skypjack

1

非常感謝@skypjack,他的解決方案有效。我只是要通過測試它添加一些東西,我發現:

​​是不是真的有必要,這些三線足以使項目編譯:

INCLUDEPATH += c:/MinGW/msys/1.0/local/include 
LIBS += c:/MinGW/msys/1.0/local/lib/libzbar.a 
LIBS += c:/MinGW/lib/libiconv.a 

,因爲我清楚地記得試圖其中很奇怪甚至在將問題發佈到SO之前。但交換後最後兩行

INCLUDEPATH += c:/MinGW/msys/1.0/local/include 
LIBS += c:/MinGW/lib/libiconv.a 
LIBS += c:/MinGW/msys/1.0/local/lib/libzbar.a 

錯誤返回。我確實在libzbar.a之前放libiconv.a,所以錯誤的確是因爲鏈接順序。

編輯:最終,它甚至與Qt創建者自己libiconv的工作,這只是我需要它zbar和之後添加:

LIBS += -Lc:/MinGW/msys/1.0/local/lib -lzbar -liconv 
相關問題