Параметры компоновщика C ++ для DLL (DEF, LIB и т. Д.) - PullRequest
0 голосов
/ 18 ноября 2009

Я загрузил библиотеку для написания программы, которая может распаковать файл RAR. (http://www.rarlab.com/rar/UnRARDLL.exe) Это дает мне unrar.dll , unrar.h , unrar.lib и UnRDLL.def Я скопировал пример кода на C и попытался скомпилировать его с Dev-Cpp и Eclipse.

У меня нет большого опыта использования DLL, поэтому я не знаю, как справляться со следующими ошибками компоновщика:

UnRDLL.o (.text + 0x151): UnRDLL.c: неопределенная ссылка на RAROpenArchiveEx@4' UnRDLL.o(.text+0x1c0):UnRDLL.c: undefined reference to RARSetCallback @ 12 ' UnRDLL.o (.text + 0x1e2): UnRDLL.c: неопределенная ссылка на RARReadHeader@8' UnRDLL.o(.text+0x2b9):UnRDLL.c: undefined reference to RARProcessFile @ 16 ' UnRDLL.o (.text + 0x2fe): UnRDLL.c: неопределенная ссылка на RARCloseArchive@4' UnRDLL.o(.text+0x366):UnRDLL.c: undefined reference to RAROpenArchiveEx @ 4 ' UnRDLL.o (.text + 0x3d6): UnRDLL.c: неопределенная ссылка на RARSetCallback@12' UnRDLL.o(.text+0x41c):UnRDLL.c: undefined reference to RARReadHeaderEx @ 8 ' UnRDLL.o (.text + 0x4c2): UnRDLL.c: неопределенная ссылка на RARProcessFile@16' UnRDLL.o(.text+0x4fa):UnRDLL.c: undefined reference to RARCloseArchive @ 4 '

Google предложил добавить - def UnRDLL.def и -lunrar в параметры компоновщика, а также скопировать файл .lib в каталог Dev-Cpp \ lib.

Не могли бы вы объяснить мне, что я делаю не так? Если возможно, скажите мне, какие файлы должны быть в каталоге с исходным кодом, что должно быть с библиотеками, что нужно добавить в проект и какие опции компоновщика там должны быть, а также все, что я полностью пропустил .

РЕДАКТИРОВАТЬ: я не знаю почему, но я просто вручную переделал все настройки, как описано выше, и теперь это работает. В любом случае спасибо за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 18 ноября 2009

Я рекомендую использовать Visual Studio Express (бесплатно доступен от Microsoft по указанной ссылке) для компиляции и компоновки вашей программы. Я думаю, что в этом случае это немного проще, чем другие инструменты, которые вы упомянули, хотя это только мое личное мнение.

Я рекомендую использовать макет, подобный этому для вашего проекта:

\myproject
  \src
  \include
\thirdparty
  \bin
  \lib
  \include

Ваши исходные файлы C / C ++ будут жить под myproject\src, а ваши заголовочные файлы будут жить под myproject\include. Файлы библиотеки, которые вы скачали, находятся под thirdparty: DLL принадлежит bin, файл .lib и .def - lib, а файлы заголовков библиотеки - include.

Далее необходимо настроить проект в Visual Studio Express. В свойствах вашего проекта в разделе Linker -> General добавьте \thirdparty\lib в каталоги дополнительных библиотек. Под Linker -> Input добавьте unrar.lib к дополнительным зависимостям. Это сообщает Visual Studio Express имя и местоположение вашей сторонней библиотеки, чтобы она могла связать ее с вашим основным приложением.

При запуске вашей программы вам нужно скопировать unrar.dll в выходной каталог вашего проекта, чтобы ваша программа могла его загрузить.

Это должно помочь вам начать ...

1 голос
/ 18 ноября 2009

В свое время Borland предоставляла инструмент для создания файла lib из файла def.

В современном мире лучше всего добавить файл lib в свой проект в Project-> Properties Config Props-> Linker-> Input-> Additional Depenancies. Возможно, вам понадобится добавить расположение файла lib в Props-> Linker-> General-> Additional Lib Dirs. Убедитесь, что DLL находится на вашем пути или скопирована с исполняемыми файлами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...