ftylitak/qzxing

Embed the source code error on Qt 5.15 macos

surfingtomchen opened this issue · 2 comments

Hi,

I tried to integrate the code into my own project in a embeded way. If the target is Android, I get quite a lots of compiling errors. When I choose the target to Desktop, then I got following link error.

"Undefined symbols for architecture x86_64:

  "zxing::String::append(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      zxing::oned::rss::RSS14Reader::constructResult(zxing::oned::rss::Pair, zxing::oned::rss::Pair) const in RSS14Reader.o
      zxing::oned::rss::ExpandedRow::toString() in ExpandedRow.o
      zxing::oned::rss::AI01AndOtherAIs::parseInformation() in AI01AndOtherAIs.o
      zxing::oned::rss::AI01decoder::encodeCompressedGtin(zxing::String&, int) in AI01decoder.o
      zxing::oned::rss::AI01decoder::encodeCompressedGtinWithoutAI(zxing::String&, int, int) in AI01decoder.o
      zxing::oned::rss::AI01decoder::appendCheckDigit(zxing::String&, int) in AI01decoder.o
      zxing::oned::rss::AI01weightDecoder::encodeCompressedWeight(zxing::String&, int, int) in AI01weightDecoder.o
      ...
  "zxing::String::append(char)", referenced from:
      zxing::oned::rss::RSS14Reader::constructResult(zxing::oned::rss::Pair, zxing::oned::rss::Pair) const in RSS14Reader.o
      zxing::oned::rss::AI01decoder::encodeCompressedGtin(zxing::String&, int) in AI01decoder.o
      zxing::oned::rss::AI01weightDecoder::encodeCompressedWeight(zxing::String&, int, int) in AI01weightDecoder.o
      zxing::oned::rss::AI013x0x1xDecoder::encodeCompressedDate(zxing::String&, int) in AI013x0x1xDecoder.o
      zxing::oned::rss::AI013x0x1xDecoder::addWeightCode(zxing::String&, int) in AI013x0x1xDecoder.o
      zxing::oned::rss::AI01392xDecoder::parseInformation() in AI01392xDecoder.o
      zxing::oned::rss::AI01393xDecoder::parseInformation() in AI01393xDecoder.o
      ...
  "zxing::String::String(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      zxing::oned::UPCEReader::convertUPCEtoUPCA(zxing::Ref<zxing::String> const&) in UPCEReader.o
      zxing::oned::UPCEANReader::decodeRow(int, zxing::Ref<zxing::BitArray>, zxing::oned::OneDReader::Range const&, zxing::DecodeHints) in UPCEANReader.o
      zxing::oned::UPCEANExtension2Support::decodeRow(int, zxing::Ref<zxing::BitArray>, int, int) in UPCEANExtension2Support.o
      zxing::oned::UPCEANExtension5Support::decodeRow(int, zxing::Ref<zxing::BitArray>, int, int) in UPCEANExtension5Support.o
      zxing::oned::UPCAReader::maybeReturnResult(zxing::Ref<zxing::Result>) in UPCAReader.o
      zxing::oned::ITFReader::decodeRow(int, zxing::Ref<zxing::BitArray>, zxing::DecodeHints) in ITFReader.o
      zxing::oned::EANManufacturerOrgSupport::lookupCountryIdentifier(zxing::Ref<zxing::String>&) in EANManufacturerOrgSupport.o
      ...
  "zxing::String::String(int)", referenced from:
      zxing::oned::rss::RSS14Reader::constructResult(zxing::oned::rss::Pair, zxing::oned::rss::Pair) const in RSS14Reader.o
      zxing::pdf417::DecodedBitStreamParser::decode(zxing::ArrayRef<int>) in PDF417DecodedBitStreamParser.o
  "zxing::String::size() const", referenced from:
      zxing::oned::ITFReader::decodeRow(int, zxing::Ref<zxing::BitArray>, zxing::DecodeHints) in ITFReader.o
  "zxing::String::charAt(int) const", referenced from:
      zxing::oned::MultiFormatUPCEANReader::decodeRow(int, zxing::Ref<zxing::BitArray>, zxing::DecodeHints) in MultiFormatUPCEANReader.o
      zxing::oned::rss::RSS14Reader::constructResult(zxing::oned::rss::Pair, zxing::oned::rss::Pair) const in RSS14Reader.o
      zxing::oned::rss::AI01decoder::appendCheckDigit(zxing::String&, int) in AI01decoder.o
  "zxing::String::length() const", referenced from:
      zxing::oned::UPCEANReader::decodeRow(int, zxing::Ref<zxing::BitArray>, zxing::oned::OneDReader::Range const&, zxing::DecodeHints) in UPCEANReader.o
      zxing::oned::rss::RSS14Reader::constructResult(zxing::oned::rss::Pair, zxing::oned::rss::Pair) const in RSS14Reader.o
      zxing::oned::rss::AI01AndOtherAIs::parseInformation() in AI01AndOtherAIs.o
      zxing::oned::rss::AI01decoder::encodeCompressedGtin(zxing::String&, int) in AI01decoder.o
      zxing::oned::rss::FieldParser::parseFieldsInGeneralPurpose(zxing::String) in FieldParser.o
      zxing::oned::rss::FieldParser::processVariableAI(int, int, zxing::String) in FieldParser.o
      zxing::oned::rss::FieldParser::processFixedAI(int, int, zxing::String) in FieldParser.o
      ...
  "zxing::String::getText() const", referenced from:
      QZXing::decodeImage(QImage const&, int, int, bool) in QZXing.o
      zxing::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, zxing::Result&) in ResultIO.o
      zxing::multi::GenericMultipleBarcodeReader::doDecodeMultiple(zxing::Ref<zxing::BinaryBitmap>, zxing::DecodeHints, std::__1::vector<zxing::Ref<zxing::Result>, std::__1::allocator<zxing::Ref<zxing::Result> > >&, int, int, int) in GenericMultipleBarcodeReader.o
      zxing::oned::UPCEReader::convertUPCEtoUPCA(zxing::Ref<zxing::String> const&) in UPCEReader.o
      zxing::oned::UPCEANReader::decodeRow(int, zxing::Ref<zxing::BitArray>, zxing::oned::OneDReader::Range const&, zxing::DecodeHints) in UPCEANReader.o
      zxing::oned::UPCEANReader::checkStandardUPCEANChecksum(zxing::Ref<zxing::String> const&) in UPCEANReader.o
      zxing::oned::UPCAReader::maybeReturnResult(zxing::Ref<zxing::Result>) in UPCAReader.o
      ...
  "zxing::String::substring(int, int) const", referenced from:
      zxing::oned::MultiFormatUPCEANReader::decodeRow(int, zxing::Ref<zxing::BitArray>, zxing::DecodeHints) in MultiFormatUPCEANReader.o
      zxing::oned::rss::FieldParser::parseFieldsInGeneralPurpose(zxing::String) in FieldParser.o
      zxing::oned::rss::FieldParser::processVariableAI(int, int, zxing::String) in FieldParser.o
      zxing::oned::rss::FieldParser::processFixedAI(int, int, zxing::String) in FieldParser.o

Here is my pro file:

QT += core gui qml quick widgets network xml quickwidgets concurrent multimedia

contains(ANDROID_TARGET_ARCH,armeabi-v7a) {
QT += androidextras
}

QMAKE_CFLAGS += -std=c++0x
QMAKE_CFLAGS += -fshort-wchar
QMAKE_CFLAGS += -Wno-write-strings
QMAKE_CFLAGS += -Wno-conversion-null
QMAKE_CFLAGS += -Wno-narrowing

QMAKE_CXXFLAGS += -fshort-wchar
QMAKE_CXXFLAGS += -std=c++0x
QMAKE_CXXFLAGS += -Wno-write-strings
QMAKE_CXXFLAGS += -Wno-conversion-null
QMAKE_CXXFLAGS += -Wno-narrowing


QMAKE_EXT_CPP += .c
QMAKE_EXT_CPP += .cc
QMAKE_EXT_CPP += .cpp

CONFIG += mobility
CONFIG += qzxing_qml
CONFIG += qzxing_multimedia

include(qzxing/QZXing.pri)

the pro file ignore some the source file of my own.

please let me know how to solve this, thanks in advance.

Hello @surfingtomchen

sorry for the long delay.

My guess on this would be towards the use of namespaces in the file src/zxing/zxing/common/Str.cpp. Since in both Linux and Windows I can not reproduce this error, attached you will find a zip folder with Str.h and Str.cpp. Copy these files in the QZXing folder under: QZXing/src/zxing/zxing/common

Looking forward to your input.

Str.zip

Closing due to no further info.