Ошибка при статической ссылке на libzbar.a: неопределенная ссылка на `_imp__GetACP @ 0 ‘

Я ссылаюсь на zbar из моей программы. Я построил zbar, используя mingw / msys. Мое приложение построено с использованием Qt Creator.

Когда я динамически связываюсь с zbar, используя libzbar.dll.a, он компилируется и работает нормально. Когда я ссылаюсь на libzbar.aсборка моего приложения завершается с ошибкой компоновщика:

C: / Qt / Инструменты / mingw491_32 / бен /../ Библиотека / GCC / i686-w64-mingw32 / 4.9.1 /../../../../ i686-w64-mingw32 / Библиотека / .. /lib/libiconv.a(localcharset.o):localcharset.c:(.text+0x7): неопределенная ссылка на `_imp__GetACP @ 0 '
collect2.exe: ошибка: ld вернул 1 состояние выхода

Это запутанный путь — 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

3

Решение

Попробуй с .профессионал файл как следующий:

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
1

Другие решения

Большое спасибо @skypjack, его решение работает. Я только добавлю некоторые вещи, которые я узнал, протестировав это:

PRE_TARGETDEPS не было необходимости, этих трех строк достаточно для компиляции проекта:

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. Но после поменять местами последние 2 строки:

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

ошибка вернулась. Я действительно положил libiconv.a до libzbar.a, так что ошибка действительно была из-за порядка ссылок.

Редактировать: В конце концов, это работало даже с собственной библиотекой Qt Creator, просто мне нужно было добавить ее после zbar:

LIBS += -Lc:/MinGW/msys/1.0/local/lib -lzbar -liconv
2

По вопросам рекламы [email protected]