RAD Studio 10.2 Tokyo Update 2
プロジェクトをビルド時に以下を含むエラーが出る。
[ilink32 エラー] Error: 未解決の外部シンボル 'System::Win::Comobj::CoInitFlags' が C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\19.0\LIB\WIN32\DEBUG\RTLE.LIB|syssupp から参照されています
エラーの発生手順
- ファイル > 新規作成 > その他 を選択
- C++ Builderプロジェクト > コンソールアプリケーション を選択
- 「新規コンソールアプリケーション」ダイアログにて「ターゲットフレームワーク」は「なし」を選択
-
以下のひな型ができる。
-
# pragma hdrstop
# pragma argsused
# ifdef _WIN32
# include <tchar.h>
# else
typedef char _TCHAR;
#define _tmain main
# endif
# include <stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
以下のように書き換える。
# include <vcl.h>
# include <windows.h>
# pragma hdrstop
# pragma argsused
# ifdef _WIN32
# include <tchar.h>
# else
typedef char _TCHAR;
#define _tmain main
# endif
int _tmain(int argc, _TCHAR* argv[])
{
String lpath = L"TEST";
return 0;
}
- ファイルをビルド: 成功
- プロジェクトをビルド: 下記のエラーが出る
[ilink32 エラー] Error: 未解決の外部シンボル '__fastcall System::Internal::Strhlpr::UnicodeFree(System::UnicodeString&)' が C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\19.0\LIB\WIN32\DEBUG\VCLE.LIB|ustring から参照されています
[ilink32 エラー] Error: 未解決の外部シンボル '__fastcall System::Internal::Strhlpr::UnicodeSetLength(System::UnicodeString&, int)' が C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\19.0\LIB\WIN32\DEBUG\VCLE.LIB|ustring から参照されています
[ilink32 エラー] Error: リンクを実行できません
失敗
対処
コンソールアプリケーションを新規作成する時にターゲットフレームワークを「ビジュアルコンポーネントライブラリ」にする。
作成されたひな型に対して以下のように書き換える。
# include <vcl.h>
# include <windows.h>
# pragma hdrstop
# pragma argsused
# include <tchar.h>
# include <stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{
String lpath = L"TEST";
return 0;
}
- ファイルをビルド: 成功
- プロジェクトをビルド: 成功
Bugなのか仕様なのか
ターゲットフレームワークの選択により、File1.cpp以外の部分で何かが違うのだろう。
ビルドエラーのメッセージを見ただけでは上記の対処にたどり着けないだろう。
落とし穴
「新規コンソールアプリケーション」ダイアログにて「ターゲットフレームワーク」
はIDEインストール直後は「なし」になっている。
いったん「ビジュアルコンポーネントライブラリ」に変更すると、その変更が以後記憶される。
最初の状態とは違う設定をしている場合、環境を再構築した時にエラーが発生するようになり、その原因特定に時間を取られる。