2012-02-16 2 views
1

Я получаю ошибку выше при попытке использовать сторонний SDK с программой на C++, написанной с использованием eclipse на XP. На основе запросов я понимаю, что эта ошибка вызвана тем, что компоновщик неправильно указывает на .dll или .lib. Я включил путь к этим элементам в Environmental Variable - PATH, а также в eclipse в разделе «Свойства \ C/C++ Build \ Settings \ MinGW C++ Linker \ Libraries». Путь, используемый для обоих этих элементов является C: \ Program Files сканирования \ Card Solutions \ SDKundefined reference to '_imp__InitBizLib'

Вот консольный вывод:

**** Build of configuration Debug for project HelloWorld **** 

**** Internal Builder is used for build    **** 
g++ -IC:\Program Files\Card Scanning Solutions\SDK -O0 -g3 -Wall -c -fmessage-length=0 -lm -v -o src\BizScan.o ..\src\BizScan.cpp 
Using built-in specs. 
COLLECT_GCC=g++ 
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.6.1/lto-wrapper.exe 
Target: mingw32 
Configured with: ../gcc-4.6.1/configure --enable-languages=c,c++,fortran,objc,obj-c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgomp --disable-win32-registry --enable-libstdcxx-debug --enable-version-specific-runtime-libs --build=mingw32 --prefix=/mingw 
Thread model: win32 
gcc version 4.6.1 (GCC) 
COLLECT_GCC_OPTIONS='-I' 'C:\Program Files\Card Scanning Solutions\SDK' '-O0' '-g3' '-Wall' '-c' '-fmessage-length=0' '-v' '-o' 'src\BizScan.o' '-shared-libgcc' '-mtune=i386' '-march=i386' 
c:/mingw/bin/../libexec/gcc/mingw32/4.6.1/cc1plus.exe -quiet -v -I C:\Program Files\Card Scanning Solutions\SDK -iprefix c:\mingw\bin\../lib/gcc/mingw32/4.6.1/ -dD ..\src\BizScan.cpp -quiet -dumpbase BizScan.cpp -mtune=i386 -march=i386 -auxbase-strip src\BizScan.o -g3 -O0 -Wall -version -fmessage-length=0 -o C:\DOCUME~1\Game\LOCALS~1\Temp\ccwufpbm.s 
GNU C++ (GCC) version 4.6.1 (mingw32) 
    compiled by GNU C version 4.6.1, GMP version 5.0.1, MPFR version 2.4.1, MPC version 0.8.1 
GGC heuristics: --param ggc-min-expand=64 --param ggc-min-heapsize=65307 
ignoring nonexistent directory "c:\mingw\bin\../lib/gcc/mingw32/4.6.1/../../../../mingw32/include" 
ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.6.1/include/c++" 
ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.6.1/include/c++/mingw32" 
ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.6.1/include/c++/backward" 
ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.6.1/include" 
ignoring duplicate directory "/mingw/lib/gcc/mingw32/4.6.1/../../../../include" 
ignoring duplicate directory "c:/mingw/lib/gcc/../../include" 
ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.6.1/include-fixed" 
ignoring nonexistent directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.6.1/../../../../mingw32/include" 
ignoring duplicate directory "/mingw/include" 
#include "..." search starts here: 
#include <...> search starts here: 
C:\Program Files\Card Scanning Solutions\SDK 
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++ 
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/mingw32 
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/backward 
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include 
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/../../../../include 
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include-fixed 
End of search list. 
GNU C++ (GCC) version 4.6.1 (mingw32) 
    compiled by GNU C version 4.6.1, GMP version 5.0.1, MPFR version 2.4.1, MPC version 0.8.1 
GGC heuristics: --param ggc-min-expand=64 --param ggc-min-heapsize=65307 
Compiler executable checksum: 8e56a7b4b7f3db333ff95dd4b2d788a4 
COLLECT_GCC_OPTIONS='-I' 'C:\Program Files\Card Scanning Solutions\SDK' '-O0' '-g3' '-Wall' '-c' '-fmessage-length=0' '-v' '-o' 'src\BizScan.o' '-shared-libgcc' '-mtune=i386' '-march=i386' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.1/../../../../mingw32/bin/as.exe -o src\BizScan.o C:\DOCUME~1\Game\LOCALS~1\Temp\ccwufpbm.s 
COMPILER_PATH=c:/mingw/bin/../libexec/gcc/mingw32/4.6.1/;c:/mingw/bin/../libexec/gcc/;c:/mingw/bin/../lib/gcc/mingw32/4.6.1/../../../../mingw32/bin/ 
LIBRARY_PATH=c:/mingw/bin/../lib/gcc/mingw32/4.6.1/;c:/mingw/bin/../lib/gcc/;c:/mingw/bin/../lib/gcc/mingw32/4.6.1/../../../../mingw32/lib/;c:/mingw/bin/../lib/gcc/mingw32/4.6.1/../../../;/mingw/lib/ 
COLLECT_GCC_OPTIONS='-I' 'C:\Program Files\Card Scanning Solutions\SDK' '-O0' '-g3' '-Wall' '-c' '-fmessage-length=0' '-v' '-o' 'src\BizScan.o' '-shared-libgcc' '-mtune=i386' '-march=i386' 
g++ -LC:\Program Files\Card Scanning Solutions\SDK -lm -o HelloWorld.exe src\HelloWorld.o src\BizScan.o 
src\BizScan.o: In function `ZN7BizScan4InitEv': 
C:\Documents and Settings\Game\workspace\HelloWorld\Debug/../src/BizScan.cpp:20: undefined reference to `_imp__UseFixedModel' 
C:\Documents and Settings\Game\workspace\HelloWorld\Debug/../src/BizScan.cpp:22: undefined reference to `_imp__SetTwainScanner' 
C:\Documents and Settings\Game\workspace\HelloWorld\Debug/../src/BizScan.cpp:23: undefined reference to `_imp__InitScanLib' 
C:\Documents and Settings\Game\workspace\HelloWorld\Debug/../src/BizScan.cpp:27: undefined reference to `_imp__InitImageLib' 
C:\Documents and Settings\Game\workspace\HelloWorld\Debug/../src/BizScan.cpp:31: undefined reference to `_imp__InitBizLib' 
src\BizScan.o: In function `~BizScan': 
C:\Documents and Settings\Game\workspace\HelloWorld\Debug/../src/BizScan.cpp:39: undefined reference to `_imp__UnInitScanLib' 
collect2: ld returned 1 exit status 
Build error occurred, build is stopped 
Time consumed: 5648 ms. 

Вот BizScan.cpp:

/* 
* BizScan.cpp 
* 
* Created on: Feb 13, 2012 
*  Author: TFB 
*/ 

#include "BizScan.h" 
#include "slibexp.h" // ScanLib SDK header file 
#include "..\header_lib\BizExp.h" // ScanLib SDK header file 
#include "..\header_lib\ImageExp.h" // ScanLib SDK header file 
#include "CSSN.h" 
#include "windef.h" 

BizScan::BizScan() { 
    BizScan::Init(); 
} 

const char* BizScan::Init() { 
    UseFixedModel(11); 
    const char *scannerSelected = "WIA-A6 Scanner 735"; 
    int result = SetTwainScanner(scannerSelected); 
    result = InitScanLib(CSSN::GetSDKLicense().c_str()); 
    if(result < 0 && result != -13){ 
     return ScannerErrors(result); 
    } else { 
     result = InitImageLib(CSSN::GetSDKLicense().c_str());//initialize Image Lib SDK 
     if(result < 0 && result != -13)//if error 
      return ImageErrors(result);//call image lib sdk 

     result = InitBizLib(CSSN::GetSDKLicense().c_str());//initialize Biz Card Lib Scanner SDK 
     if(result < 0 && result != -13)//if error 
      return BizErrors(result);//call biz card scanner Lib SDK error handler 
    } 
    return "Successful Initialization !!"; 
} 

BizScan::~BizScan() { 
    UnInitScanLib(); 
} 

Вот BizScan.h:

/* 
* BizScan.h 
* 
* Created on: Feb 13, 2012 
*  Author: TFB 
*/ 

#ifndef BIZSCAN_H_ 
#define BIZSCAN_H_ 

#include "windef.h" 

typedef HINSTANCE hDLL; 

class BizScan { 
private: 

public: 
    BizScan(); 
    virtual ~BizScan(); 
    const char* Init() ; 
}; 

#endif /* BIZSCAN_H_ */ 

А вот соответствующая часть slibexp.h:

/*///////////////////////////////////////////////////////////////////// 
// 
// SLibExp.h 
// 
// Card Scanning Solutions (LLC) 
// All Rights Reserved 
// 
/////////////////////////////////////////////////////////////////////*/ 
#ifndef SLIBEXP_H 
#define SLIBEXP_H 


#ifdef SDLL 
#define SDLL_EXP __declspec(dllexport) 
#else 
#define SDLL_EXP __declspec(dllimport) 
#endif 

// Functions Prototypes 
#if defined __cplusplus || defined c_plusplus 
extern "C" 
{ 
#endif 

SDLL_EXP void UseFixedModel(int val); 
SDLL_EXP short SetTwainScanner(const char *szStr); 
SDLL_EXP short InitScanLib(const char * license); 
IMAGE_EXPORT short InitImageLib(const char *licanse); 
SDLL_EXP short UnInitScanLib(); 

#if defined __cplusplus || defined c_plusplus 
}; 
#endif 

#endif /* SLIBEXP_H */ 

Другие два метода, указанные в выводе на консоль, оба определены в других файлах заголовков, находящихся в одной и той же папке (корневой каталог проекта). Они определены следующим образом:

IMAGE_EXPORT short InitImageLib(const char *licanse); 
extern "C" BIZ_EXPORT short InitBizLib(const char *license); 

Есть ли еще место для связи .dll. Я попытался использовать метод LoadLibrary(), но этот метод отклоняется за то, что он не является частью области. Как я должен ссылаться на эти dll? Спасибо за любое направление, которое вы можете предложить.

ответ

1

Глядя на выходе вы показываете, это соответствующая команда:

g++ -LC:\Program Files\Card Scanning Solutions\SDK -lm -o HelloWorld.exe src\HelloWorld.o src\BizScan.o 

Она включает в себя путь к библиотеке, но там нет ссылки ро самой фактической библиотеки. Я не знаю, что такое имя библиотеки, но давайте предположим, что это libBizLib.a, в конце этой команды должно быть -lBizLib; или если вы хотите установить ссылку на dll, вы можете использовать его полное имя (без -l).

(Кстати, вы упомянуть .lib расширение библиотеки. Это обычно указывает на визуальной библиотеки Studio. Вы уверены, что у вас версия, совместима с MinGW?)

+0

Спасибо за ваше предложение. Это в конечном итоге было результатом того, что библиотека была скомпилирована с помощью Visual Studio. – OnesAndZeros