使用适用于Linux的DBR 5.2构建Swift条形码阅读器

几周前,苹果发布了Swift 4.0 ,可用于macOS和Ubuntu 14/16。 在本文中,我将分享如何使用Dynamsoft Barcode Reader SDK for Linux实现一个简单的Swift条码读取器(命令行工具)。

  • Windows 10。
  • VMware 11.1.2。
  • Ubuntu 14.04。
  • 斯威夫特4.0。
  • 适用于Linux的Dynamsoft条码阅读器5.2。

使用虚拟机时,如果要使用Windows工具为Linux编写代码,则可以使用共享文件夹。

通过虚拟机设置添加共享文件夹很容易:

但是,来宾操作系统中的/ mnt /下可能没有列出共享文件夹,例如Ubuntu 14.04。 运行以下命令以检查Ubuntu版本:

  lsb_release -a 

要解决此问题,请下载并安装补丁程序:

 git clone https://github.com/rasa/vmware-tools-patches.git cd vmware-tools-patches sudo ./patched-open-vm-tools.sh sudo vmware-config-tools.pl sudo reboot 

现在您可以看到共享文件夹和文件。 这种方式适用于运行如下所示的快速代码:

 迅捷xxx.swift 

但是,如果使用swiftc编译代码,则会导致错误:

  swiftc test.swift /usr/bin/ld.gold: fatal error: test: Input/output error clang: error: linker command failed with exit code 1 (use -v to see invocation) :0: error: link command failed with exit code 1 (use -v to see invocation) 

要使用Swift,您必须预先安装以下依赖项:

 须藤apt-get install clang libicu-dev 

如果您无法运行swiftc,请参考Vincent Saluzzo的解决方案:

  sudo apt-get install -y libicu-dev sudo apt-get install -y clang-3.6 sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-3.6 100 sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-3.6 100 

受StackOverflow问题的启发-在Linux下编译C代码并将其公开给Swift,我已经通过链接libDynamsoftBarcodeReader.so成功创建了命令行条形码阅读器。

使用一些公开的方法创建dbr.h

  #include "DynamsoftBarcodeReader.h" int initLicense( const char * pszLicense);  char * decodeFile( const char * pFileName, int iFormat); char * pFileName, int iFormat);  int createDBR();  void destroyDBR(); 

创建dbr.c来调用Dynamsoft Barcode Reader SDK:

  #include  #include "dbr.h" #define DBR_NO_MEMORY 0 #define DBR_SUCCESS 1 // Barcode reader handler void * hBarcode = NULL;  /** * Create DBR instance */ int createDBR() { if (!hBarcode) { hBarcode = DBR_CreateInstance();  if (!hBarcode) { printf ("Cannot allocate memory!\n");  return DBR_NO_MEMORY;  return DBR_SUCCESS;  } /** * Destroy DBR instance */ void destroyDBR() { if (hBarcode) { DBR_DestroyInstance(hBarcode);  } } /** * Set Dynamsoft Barcode Reader license.  * To get valid license, please contact support@dynamsoft.com * Invalid license is acceptable. With an invalid license, SDK will return an imcomplete result. * Invalid license is acceptable. With an invalid license, SDK will return an imcomplete result.  */ int initLicense( const char * pszLicense) { if (!createDBR()) { return -1;  } return DBR_InitLicenseEx(hBarcode, pszLicense);  } char * createPyResults(SBarcodeResultArray *pResults) { // Get barcode results int count = pResults->iBarcodeCount; SBarcodeResult** ppBarcodes = pResults->ppBarcodes; SBarcodeResult* tmp = NULL;  int i = 0;  for (; i < count; i++) { tmp = ppBarcodes[i]; printf ("Result: %s, Format: %s\n", tmp->pBarcodeData, tmp->pBarcodeFormatString);  } // Release memory DBR_FreeBarcodeResults(&pResults);  return NULL;  } /** * Decode barcode from a file */ char * decodeFile( const char * pFileName, int iFormat) char * pFileName, int iFormat) { if (!createDBR()) { return NULL;  } // Initialize Dynamsoft Barcode Reader int iMaxCount = 0x7FFFFFFF; SBarcodeResultArray *pResults = NULL; DBR_SetBarcodeFormats(hBarcode, iFormat); DBR_SetMaxBarcodesNumPerPage(hBarcode, iMaxCount);  // Barcode detection int ret = DBR_DecodeFileEx(hBarcode, pFileName, &pResults);  // Wrap results return createPyResults(pResults); } 

创建条形码.swift以调用C API:

  let count = CommandLine.arguments.count if count < 2 { print("Please add a file name. Eg ./barcode test.tif") } else { let fileName = CommandLine.arguments[1] createDBR() let ret = initLicense("t0068MgAAAGvV3VqfqOzkuVGi7x/PFfZUQoUyJOakuduaSEoI2Pc8+kMwjrojxQgE5aJphmhagRmq/S9lppTkM4w3qCQezxk=") if ret == 0 { // Read barcode let barcodeTypes : Int32 = 0x3FF 
0x2000000
0x8000000
0x4000000; // 1D, QRCODE, PDF417, DataMatrix 0x4000000; // 1D, QRCODE, PDF417, DataMatrix decodeFile(fileName, barcodeTypes); } destroyDBR() }

gcc编译dbr.c:

  gcc -c dbr.c 

swiftc编译Barcode.swift

  swiftc -import-objc-header dbr.h条码.swift dbr.o -o条码-lDynamsoftBarcodeReader 

运行快速条形码阅读器:

  ./条形码test.tif 

https://github.com/dynamsoft-dbr/linux-swift-4.0-barcode-reader


最初于 2017年10月16日 发布在 www.codepool.biz