質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.54%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

Q&A

解決済

1回答

7540閲覧

clコンパイラで"LINK : fatal error LNK1561: エントリー ポイントを定義しなければなりません。"の解決方法が知りたい。オプションがわからない。

退会済みユーザー

退会済みユーザー

総合スコア0

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

0グッド

1クリップ

投稿2020/07/17 02:57

編集2020/07/20 11:37

Visual studio 2019のコンパイラであるclコンパイラを使ってコンパイルして.libをリンクして.dllもビルド?したいのですがどうすればいいのでしょうか以下の提示画像のエラーの解決方法が知りたいです。

試したこと

1、Visual studio 2019ではコンパイルが通り実行画面が表示されているためコンパイルエラーではないと思います。

2、また../を使って今の階層からSDL2ライブラリの.libファイルの場所をしていますが本当にその場所かどうかはエキスプローラーで確認しているためこの場所なのは確認済みです。

3、当然のことながらsourceディレクトリに二つのソースファイル Game.cpp main.cppが存在しているのは確認済みです。ウインドウのタイトルを見てわかる通りclコンパイラが使えるコマンドラインを使っています。

エラーコード: "LINK : fatal error LNK1561: エントリー ポイントを定義しなければなりません。"
※白く加工してある部分は自分の実名ディレクトリ名です。

参考サイト(windows公式サイト): https://docs.microsoft.com/ja-jp/cpp/build/reference/cl-invokes-the-linker?view=vs-2019

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

Bull

2020/07/20 05:08

作成しているプログラムは、Console Application ですか? それとも、Windows Application ですか? Console Application は main() から始まり、Windows Application は WinMain() から始まります。
退会済みユーザー

退会済みユーザー

2020/07/20 05:09

いえSDLライブラリなのですがint main();です。これが違うのでしょうか?
Bull

2020/07/20 05:21

私は SDL2ライブラリについてはよく知らないので、的確なアドバイスはできませんが、ちょっと検索してみると、 int main(int argc, char * args[]){} にしろと書いてありました。 main() ではダメなのかも知れません。
退会済みユーザー

退会済みユーザー

2020/07/20 06:04

変更してみましたが依然として同じエラーがでますw
Bull

2020/07/20 06:15

サブシステムを指定しないといけないのかも知れません。 コマンドラインに「-link /Subsystem:Windows」を追加したらどうですか。
退会済みユーザー

退会済みユーザー

2020/07/20 06:33

ライブラリのコンピューターの種類 'x64' がターゲットのコンピューターの種類' x86' と競合しています というエラーコードに変わりました。あと未定義の外部参照というエラーも出ています。
Bull

2020/07/20 06:49

x86 用のライブラリがあるのならば、それを指定してください。 あるいは、x64 のコンパイラを使用してください。 未定義の具体的なシンボルはなんでしょうか?
退会済みユーザー

退会済みユーザー

2020/07/20 06:52

SDLライブラリのライブラリ関数です。あとx64に設定するにはどうしたらいいのでしょうか?無知ですいません。
Bull

2020/07/20 06:55

スタートメニューから「x64 Native Tools Command Prompt for VS 2019」を開けば、コンパイラは x64 用になります。
退会済みユーザー

退会済みユーザー

2020/07/20 11:29 編集

はい。自分も試しましたがエラーになります。それと.dllもリンクする必要があるのではないでしょうがあると思うのですが一体どうすればいいのでしょうか?w
pepperleaf

2020/07/20 11:56

> Visual studio 2019ではコンパイルが通り実行画面が表示されている とありすが、そちらの設定はどうなっているのでしょう。同じにすれば、良いと思いますが、、、 なお、 > int main();です。 これは、ダメ。実体が必要。 int main() {} のように、、、。
Bull

2020/07/20 13:36

あれから時間ができたので、SDL2 をダウンロードして、ネットで探したサンプルプログラムをビルドしてみました。 x86 ですが、コマンドラインで、 cl ソース.cpp SDL2main.lib SDL2.lib shell32.lib /link /Subsystem:Console で成功しました。 shell32.lib をリンクして、サブシステムを明示すればいけると思います。
Bull

2020/07/20 13:48

Visual Studio で Windows Application でビルドした場合、サブシステムは明示されていますし、shell32.lib も指定されているので、ビルドが成功したのでしょう。 SDL は面白いことに、同じソースで Console Application にも Windows Application にもできるみたいです。そのため、サブシステムを明示しないといけないみたいです。
退会済みユーザー

退会済みユーザー

2020/07/21 01:51

できました。!ベストアンサーを見てくださいw
退会済みユーザー

退会済みユーザー

2020/07/23 04:43

今更 質問ですが shell32.libですが32とは32ビットで64ビット版のshell64.libはないのでしょうか? 試しましたがありませんでした。この32は何を意味しているのでしょうか?検索しても英語の記事が多くよく理解できません。
Bull

2020/07/23 07:06 編集

64ビット版も shell32.lib で 32ビット版と名前は同じです。 WindowsAPI 用の .lib はほとんどの場合、同名の .dll に対応しています。 32ビットと64ビットの .dll は同じ名前で、違うフォルダに格納されていますが、.lib も同じ名前で違うフォルダに格納されています。 x64 用のコマンドプロンプトを開けば、64ビット用のライブラリをリンクするように設定されます。 shell32.lib の 32 は 32ビットの 32 です。これは 16ビットの shell.lib と区別するために付けられたと思いますが、詳細はよく知らないです。 32ビットと64ピットの .lib/.dll は同じ名前です。なぜそうなのかはよく判らないです。 全く余談ですが、32ビットの Windows には、C:\Windows\System32 に、krnl386.exe、user.exe, gdi.exe, shell.dll などと kernel32.dll, user33.dll, gdi32.dll, shell32.dll などが同居してます。 当然ですが、64ビットの Windows には 16ビットの .dll はありません。
guest

回答1

1

ベストアンサー

オプションに../SDL2/lib/x64/SDL2main.libと/link /SUBSYSTEM:CONSOLEを追加でいけると思います。

投稿2020/07/20 11:40

編集2020/07/20 11:41
mah

総合スコア582

退会済みユーザー👍を押しています

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/07/21 01:50

以下のコマンドで動き実行できました。! ディレクトリ階層の指定が面倒なのでプロジェクトファイルにすべてのファイルを入れてそこから実行しました。 cl main.cpp Game.cpp SDL2.lib SDL2_ttf.lib SDL2main.lib shell32.lib /link /Subsystem:Console
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.54%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

同じタグがついた質問を見る

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。