Проблема компоновщика c++builder с пакетом Abbrvia GetIt: ошибка ilink32 неразрешенная внешняя
Я пытаюсь использовать пакет аббревиатуры ( https://github.com/TurboPack/Abbrevia ) с c++Builder в консольном приложении. Сначала я попытался вручную установить пакет. Но потом я нашел его на GetIt. Проблема сохраняется независимо от того, как он устанавливает пакет. Я думаю, что настройки пути, которые я сделал вручную, такие же, как и у установщика пакета. Это всегда приводит к неразрешенному внешнему виду для Abdfbase::TAbDeflateHelper:: Это исходное сообщение об ошибке:
[ilink32 Fehler] Ошибка: нет внешних ссылок 'Abdfbase::TAbDeflateHelper::', ссылка на c:\pathtotheobjectfile\main.obj
Просто настройка пути и компиляция проектов для C++Builder (и, следовательно, получение объектов) — это все, что нужно для установки. А с GetIt мне даже не нужно этого делать.
Это мой самый простой старт, который я даже не могу связать.
#pragma hdrstop
#pragma argsused
#ifdef _WIN32
#include <tchar.h>
#else
typedef char _TCHAR;
#define _tmain main
#endif
#include <stdio.h>
#include <AbDfBase.hpp>
using namespace Abdfbase;
int _tmain(int argc, _TCHAR* argv[])
{
TAbDeflateHelper* helper = new TAbDeflateHelper();
return 0;
}
Это моя первая попытка использовать c++builder. Какой системный параметр или специальный код мне не хватает?
Для справки: начало импортированного файла .hpp, который показывает класс, который я пытаюсь создать.
/ CodeGear C++Builder
// Copyright (c) 1995, 2021 by Embarcadero Technologies, Inc.
// All rights reserved
// (DO NOT EDIT: machine generated header) 'AbDfBase.pas' rev: 35.00 (Windows)
#ifndef AbdfbaseHPP
#define AbdfbaseHPP
#pragma delphiheader begin
#pragma option push
#pragma option -w- // All warnings off
#pragma option -Vx // Zero-length empty class member
#pragma pack(push,8)
#include <System.hpp>
#include <SysInit.hpp>
#include <System.SysUtils.hpp>
#include <System.Classes.hpp>
//-- user supplied -----------------------------------------------------------
namespace Abdfbase
{
//-- forward type declarations -----------------------------------------------
class DELPHICLASS TAbDeflateHelper;
class DELPHICLASS TAbLogger;
class DELPHICLASS TAbNodeManager;
class DELPHICLASS EAbAbortProgress;
class DELPHICLASS EAbPartSizedInflate;
class DELPHICLASS EAbInflatePasswordError;
class DELPHICLASS EAbInternalInflateError;
class DELPHICLASS EAbInflateError;
class DELPHICLASS EAbInternalDeflateError;
class DELPHICLASS EAbDeflateError;
//-- type declarations -------------------------------------------------------
typedef System::StaticArray<int, 536870911> TAbDfIntegerList;
typedef TAbDfIntegerList *PAbDfIntegerList;
typedef void __fastcall (__closure *TAbProgressStep)(int aPercentDone);
class PASCALIMPLEMENTATION TAbDeflateHelper : public System::TObject
{
typedef System::TObject inherited;
private:
int FAmpleLength;
int FChainLength;
System::UnicodeString FLogFile;
int FMaxLazy;
TAbProgressStep FOnProgressStep;
int FOptions;
__int64 FPartSize;
__int64 FSizeCompressed;
__int64 FSizeNormal;
__int64 FStreamSize;
int FWindowSize;
System::WideChar FZipOption;
protected:
void __fastcall dhSetAmpleLength(int aValue);
void __fastcall dhSetChainLength(int aValue);
void __fastcall dhSetLogFile(const System::UnicodeString aValue);
void __fastcall dhSetMaxLazy(int aValue);
void __fastcall dhSetOnProgressStep(TAbProgressStep aValue);
void __fastcall dhSetOptions(int aValue);
void __fastcall dhSetWindowSize(int aValue);
void __fastcall dhSetZipOption(System::WideChar aValue);
public:
__fastcall TAbDeflateHelper();
void __fastcall Assign(TAbDeflateHelper* aHelper);
__property int AmpleLength = {read=FAmpleLength, write=dhSetAmpleLength, nodefault};
__property int ChainLength = {read=FChainLength, write=dhSetChainLength, nodefault};
__property System::UnicodeString LogFile = {read=FLogFile, write=dhSetLogFile};
__property int MaxLazyLength = {read=FMaxLazy, write=dhSetMaxLazy, nodefault};
__property int Options = {read=FOptions, write=dhSetOptions, nodefault};
__property __int64 PartialSize = {read=FPartSize, write=FPartSize};
__property System::WideChar PKZipOption = {read=FZipOption, write=dhSetZipOption, nodefault};
__property __int64 StreamSize = {read=FStreamSize, write=FStreamSize};
__property int WindowSize = {read=FWindowSize, write=dhSetWindowSize, nodefault};
__property __int64 CompressedSize = {read=FSizeCompressed, write=FSizeCompressed};
__property __int64 NormalSize = {read=FSizeNormal, write=FSizeNormal};
__property TAbProgressStep OnProgressStep = {read=FOnProgressStep, write=dhSetOnProgressStep};
public:
/* TObject.Destroy */ inline __fastcall virtual ~TAbDeflateHelper() { }
};
1 ответ
Настройка путей поиска не сообщает компилятору/компоновщику, какие конкретные библиотеки вы на самом деле используете. Ваш проект не связан с библиотекой пакетов Abbrvia, отсюда и ошибка.
Если бы вместо этого вы создали приложение с графическим интерфейсом и визуально поместили компонент(ы) Abbreveria на
TForm
,
TFrame
, или во время разработки для вас были бы добавлены необходимые ссылки на библиотеки пакетов.
Но в консольном приложении, по крайней мере, без
TDataModule
, вам придется вручную добавить ссылки на
.bpi
упаковать библиотеку(и) в проект.