2012-01-06 14 views
4

ビルドシステムではなく、ビジュアルスタジオを介してビルドおよびリンクするプロジェクトがあります。wmainをエントリポイントとして使用するようにlink.exeに指示する方法。 LNK2019:関数__tmainCRTStartupで参照される未解決の外部シンボルmain

私が知る限り、tchar.hには、UNICODEが定義されている場合、_tmainをwmainに変換するマクロが含まれています。私はプリプロセッサの出力をチェックして、本当に_tmainがwmainに置き換えられました。 wmainを含むファイルはうまくコンパイルされますが、リンカはmainが定義されていないと不満を持ちます。

LNK2019:未解決の外部シンボルの主な機能__tmainCRTStartup

で参照は、私が(など-Dオプションの欠如によって)適切に含めておりませんマクロの別のセットでメインに変換wmain、または特別なフラグがありますされていますエントリポイントを指定するlink.exeの場合

ありがとうございます。

手動で指定/入力:mainCRTStartupはそれを修正しました。

編集: 私はmain.objファイルをチェックしました。 wmainは明確に定義されています。

+0

エントリポイント/ ENTRYを指定するフラグがありますが、おそらく__tmainCRTStartupが必要なエントリポイントです。 __tmainCRTStartupはCRTを初期化し、wmainを呼び出します。おそらくwmainを含んでいるオブジェクトファイルに対してdumpbinを実行してみてください。#definesのトレースが正しかったかどうかを確認してください。 – alanxz

+0

私はあなたのコメントを受け入れるが、私は傾ける。 – user364952

+0

コメントを受け入れることができず、私のコメントはあなたの質問に答えた時点ではないと思いました。あなたがそれと思ったら私はそれを応答として掲示し、応答を受け入れることができます。 – alanxz

答えて

-1

MSVCは、それらの名前についての魔法のような絶対に何もありません

など、期待されるエントリポイント wmain()WinMain()を呼んで独特の実行時の起動を、使用しています。あなたはMSVCのスタートアップのソースコードをお持ちでない場合は、あなたのニーズを満たすために、独自のスタートアップモジュールを実装します。私はあなたに some_conversion_function()some_count_function()の実装を残す

int main (int argc, char **argv, char **envp) 
{ 
    wchar_t **w_argv = some_conversion_function (argc, argv); 
    wchar_t **w_envp = some_conversion_function (some_count_function (envp), envp); 
    return wmain (argc, w_argv, w_envp); 
} 

+0

リンカはどの時点でエントリーポイントとしてwmainを使用することを知っていますか? – user364952

+0

@ user364952:このモジュールを他のアプリケーションとリンクするだけです。 CとC++のプラットフォームを誰もが使用していますが、Microsoftはデフォルトで 'main()'を呼び出しています。そして、 'main'が' wmain'を呼び出すと、問題は解決されます。 – wallyk

+0

違いがあります。私はワイド文字入力を扱うことができるコードを生成するリンカ(MSVCまたはそれが何であれ、私は知らない)に頼っています。それ以外の場合は単に疑問符に変換されます。 – user364952

関連する問題