C ++ Newbie: возникли проблемы со ссылками - PullRequest
0 голосов
/ 04 февраля 2009

У меня есть несколько проблем с tessdll в Visual Studio 2008. К вашему сведению, я создал это приложение как приложение MFC, я сделал это только для того, чтобы воспользоваться простым графическим интерфейсом, который мне был нужен. Это просто C ++ и win32 оттуда.

По какой-то причине он прекрасно работает как отладочный релиз (так как я включил заголовочные файлы и файлы lib, которые мне нужны, и dll находится в каждом каталоге, который я могу поместить ......).

Итак, при компоновке версии существует проблема с линковкой:

Linking...
MTGOBot.obj : error LNK2001: unresolved external symbol "__declspec
(dllimport) public: __thiscall TessDllAPI::TessDllAPI(char const
*)" (__imp_??0TessDllAPI@@QAE@PBD@Z)
MTGOBot.obj : error LNK2001: unresolved external symbol "__declspec
(dllimport) public: __thiscall TessDllAPI::~TessDllAPI(void)" (__imp_??
1TessDllAPI@@QAE@XZ)
MTGOBot.obj : error LNK2001: unresolved external symbol "__declspec
(dllimport) public: int __thiscall TessDllAPI::BeginPage(unsigned
int,unsigned int,unsigned char *,unsigned char)" (__imp_?
BeginPage@TessDllAPI@@QAEHIIPAEE@Z)
MTGOBot.obj : error LNK2001: unresolved external symbol "__declspec
(dllimport) public: struct ETEXT_STRUCT * __thiscall
TessDllAPI::Recognize_all_Words(void)" (__imp_?
Recognize_all_Words@TessDllAPI@@QAEPAUETEXT_STRUCT@@XZ)
C:\CPP Projects\Visual Studio 2008\Projects\MTGO SO Bot\MTGO SO Bot
\Release\MTGO SO Bot.exe : fatal error LNK1120: 4 unresolved externals 

Также, для справки, источник tessdll.h можно найти здесь: http://code.google.com/p/tesseract-ocr/source/browse/trunk/tessdll.h?r=165

Еще несколько деталей:

  • Я отлаживаю с панели инструментов и использую встроенный отладчик.
  • Я использую Пакет Сборка для создания версии выпуска.

Ответы [ 2 ]

2 голосов
/ 04 февраля 2009

Первое предположение: вы не использовали библиотеку ссылок для DLL. Линкер кричит о том, что некоторые символы не найдены, и TessDllAPI очень похоже на DLL. По умолчанию (читай: при запуске диалога настроек проекта) все настройки вашего проекта относятся к конфигурации сборки (отладка, выпуск), но вы можете выбрать «Все конфигурации» в графическом интерфейсе. Это объясняет, почему он работает в одной конфигурации, а не в другой.

Попробуйте

#pragma comment(lib:"tessdll")
// (Of course you need to replace the `tessdll` with the name of the library.)

в заголовочном файле или добавьте эту библиотеку для связи в конфигурации «Release».

1 голос
/ 04 февраля 2009

Не видя настроек проекта, это сложно. Что нужно проверить (различия между настройками отладки и выпуска):

1) Включаете ли вы .lib в сборку релиза?

2) Вы случайно определили директиву препроцессора для tessdll?

Я бы прошел через настройки, переключаясь между отладкой и выпуском, чтобы посмотреть, что было случайно добавлено / забыто.

Наличие DLL требуется только для времени выполнения. Вы не зашли так далеко.

...