長年私はmain()
を定義している点で特別な特徴を持つライブラリ 'wot I wrote'を使用してきました。VS2017とVS2015のリンカーに違いはありますか?
これは、私が書いたアプリケーションには、main
が必要なわけではないことを意味しています。リンカにはすでに未解決の参照があり、それを探して自分のライブラリ内で見つけます。
このテクニックは、VS2005/2008/2015を含むいくつかのプラットフォームで動作しています。今私はVS2017をインストールし、VS2015で構築されたライブラリを参照する新しいプロジェクトを開始しました。
新しいプロジェクトがこれだけのように一つのソースファイルがあります。
// necessary #includes elided
namespace gp {
void Options(Run& runner) {
runner << "test2017";
}
}
私の期待は、このファイルをコンパイルし、私のライブラリとリンク(インスタンスのタイプRun
が宣言され、そこに定義されている)ということです。
リンカはその後、文句:
LINK : fatal error LNK1561: entry point must be defined
をしかし、単純に一つのソースファイルに以下の行を追加:
int main(int, char*[]);
auto p = &main;
プログラムのリンクと実行され、私が予想される出力を得る:
を**** test2017 ****
なぜ、あなたのメインのextern「C」はありますか? –
元気です。 'extern" C "'は無関係です。私は質問からそれを削除します。私はリンカを動作させようとしている間にそれを入れましたが、チェックするためにリンカを削除したことはありませんでした。ありがとう。 – quamrana
2017でライブラリを再コンパイルすると何か変更されますか? –