DelphiでLinux 64ビットプロジェクトをビルドすると、E2597エラーが発生し、ビルドに失敗する

提供: Support
移動先: 案内検索

問題

PAServer経由でUbuntu SDKのインポートし、単純なコンソールプロジェクトをビルドすると、以下のようなエラーが発生し、ビルドに失敗します。

    MSBUILD : error E2597: E2597 C:\Program Files (x86)\Embarcadero\Studio\22.0\bin\ld-linux.exe: error: cannot find -lgcc_s
    MSBUILD : error E2597: C:\Program Files (x86)\Embarcadero\Studio\22.0\bin\ld-linux.exe: error: cannot find -lc
    MSBUILD : error E2597: C:\Program Files (x86)\Embarcadero\Studio\22.0\bin\ld-linux.exe: error: cannot find -ldl
    MSBUILD : error E2597: C:\Program Files (x86)\Embarcadero\Studio\22.0\bin\ld-linux.exe: error: cannot find -lpthread
    MSBUILD : error E2597: c:\program files (x86)\embarcadero\studio\22.0\lib\Linux64\release\SysInit.o:SysInit:function Sysinit::__malloc(NativeUInt): error: undefined reference to 'malloc'
    MSBUILD : error E2597: c:\program files (x86)\embarcadero\studio\22.0\lib\Linux64\release\SysInit.o:SysInit:function Sysinit::__free(void*): error: undefined reference to 'free'
    MSBUILD : error E2597: c:\program files (x86)\embarcadero\studio\22.0\lib\Linux64\release\SysInit.o:SysInit:function Sysinit::pthread_once(int&, void (*)()): error: undefined reference to 'pthread_once'
    MSBUILD : error E2597: c:\program files (x86)\embarcadero\studio\22.0\lib\Linux64\release\SysInit.o:SysInit:function Sysinit::pthread_key_create(unsigned int&, void (*)(void*)): error: undefined reference to 'pthread_key_create'
    MSBUILD : error E2597: c:\program files (x86)\embarcadero\studio\22.0\lib\Linux64\release\SysInit.o:SysInit:function Sysinit::dladdr(NativeUInt, dl_info&): error: undefined reference to 'dladdr'
    MSBUILD : error E2597: c:\program files (x86)\embarcadero\studio\22.0\lib\Linux64\release\SysInit.o:SysInit:function Sysinit::dlopen(char*, int): error: undefined reference to 'dlopen'
    MSBUILD : error E2597: c:\program files (x86)\embarcadero\studio\22.0\lib\Linux64\release\SysInit.o:SysInit:function Sysinit::dlclose(NativeUInt): error: undefined reference to 'dlclose'
    MSBUILD : error E2597: c:\program files (x86)\embarcadero\studio\22.0\lib\Linux64\release\SysInit.o:SysInit:function Sysinit::TlsSetValue(unsigned int, void*): error: undefined reference to 'pthread_setspecific'
    MSBUILD : error E2597: c:\program files (x86)\embarcadero\studio\22.0\lib\Linux64\release\SysInit.o:SysInit:function Sysinit::__dbk_fcall_wrapper(): error: undefined reference to '_Unwind_Resume'
    MSBUILD : error E2597: c:\program files (x86)\embarcadero\studio\22.0\lib\Linux64\release\Posix.Dlfcn.o:Posix.Dlfcn:function Posix::Dlfcn::dlclose(NativeUInt): error: undefined reference to 'dlclose'
    MSBUILD : error E2597: C:\CK\RADServer\Linux64\Release\Unit1.o:Unit1:function Unit1::TEMSTestResource1::GetItem(Ems::Resourceapi::TEndpointContext*, Ems::Resourceapi::TEndpointRequest*, Ems::Resourceapi::TEndpointResponse*): error: undefined reference to '_Unwind_Resume'
    c:\program files (x86)\embarcadero\studio\22.0\Bin\CodeGear.Delphi.Targets(407,5): error F2588: F2588 リンカ エラー コード: 1 ($00000001)
プロジェクト "Project1.dproj" 内のターゲット "_PasCoreCompile" のビルドが終了しました。 -- 失敗
プロジェクト "Project1.dproj" のビルドが終了しました。 -- 失敗
ビルドに失敗しました。

※上記は、Delphi 11でビルドした場合のエラーメッセージの例です。

解決

このエラーの原因は、Ubuntuの実行環境に必要なライブラリが不足していることに起因します。Ubuntuのインストール状況によってはビルドに必要な環境を満たしていないことがあります。

その場合は、必要なライブラリを手動でインストールする必要があります。


例えば、以下の手順を試してください。

  1. Ubuntuで必要なライブラリのインストール
    sudo apt install libqt4-dev
    sudo apt install g++-8-multilib
  2. PAServer経由でWindows環境にインポートしたLinux SDKを削除
    インポートしたlinux SDKは以下のパスに配置されます。
    (C:\Users\<ログイン名>\Documents\Embarcadero\Studio\SDKs)
  3. PAServer経由でLinux SDKを再インポート
  4. linux 64ビットプロジェクトを再ビルド

関連情報