68708


参考サイト(Qiita)の[ライブラリパスをコマンドラインオプションで指定する場合](https://qiita.com/edo_m18/items/9dfab147482b2ce31840#%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%83%91%E3%82%B9%E3%82%92%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A7%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88)という場所に乗せられている提示コード  
`gcc -o sample -L/usr/local/lib/hoge -lfoo -lbar main.c`
ですが、これはコマンドプロンプトでは提示画像のようなディレクトリ構造の場合どうしたらいいのでしょうか？

自分はg++を使うので `g++ -Lライブラリを探すディレクトリ -lライブラリ名 -lライブラリ名 ファイル名.cpp ファイル名cpp`
としていますが、これが間違えているのでしょうか？

提示画像は参照先であるSDLライブラリの **lib/x64/ **の中の.lib.dll系の場所  
ソースとヘッダーはtestディレクトリに**headerとsource**という名前でディレクトリ分けしてあります。以前間違えたときそのディレクトリには#
**include ○○** がありませんよ教えてくれたので **include** パスは通っているはず。  
[![画像の説明をここに入力](https://i.stack.imgur.com/0seAA.png)](https://i.stack.imgur.com/0seAA.png)

[code]

    g++ -L../SDL2/lib/x64/ -lSDL2 -lSDL2_ttf Game.cpp main.cpp
    
[/code]

[code]

        C:\Users\ユーザー名\Desktop\test\source>g++ -L../SDL2/lib/x64/-lSDL2-lSDL2_ttf main.cpp Game.cpp
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x48): undefined reference to `TTF_Init'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x8e): undefined reference to `TTF_OpenFont'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0xa3): undefined reference to `SDL_GetError'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0xc1): undefined reference to `SDL_Init'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0xcf): undefined reference to `SDL_GetError'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0xdf): undefined reference to `SDL_Log'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x11d): undefined reference to `SDL_CreateWindow'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x130): undefined reference to `SDL_GetError'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x140): undefined reference to `SDL_Log'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x167): undefined reference to `SDL_CreateRenderer'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x17c): undefined reference to `SDL_GetError'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x18c): undefined reference to `SDL_Log'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x240): undefined reference to `SDL_PollEvent'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x269): undefined reference to `SDL_GetKeyboardState'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x2e2): undefined reference to `SDL_GetTicks'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x31e): undefined reference to `SDL_GetTicks'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x5ba): undefined reference to `SDL_SetRenderDrawColor'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x5c8): undefined reference to `SDL_RenderClear'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x5dc): undefined reference to `TTF_OpenFont'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x610): undefined reference to `SDL_SetRenderDrawColor'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x641): undefined reference to `SDL_RenderFillRect'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x65d): undefined reference to `SDL_RenderFillRect'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x68e): undefined reference to `SDL_RenderFillRect'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x71f): undefined reference to `SDL_RenderFillRect'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x7b8): undefined reference to `SDL_RenderFillRect'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x808): undefined reference to `TTF_RenderUTF8_Blended'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x826): undefined reference to `SDL_CreateTextureFromSurface'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x85a): undefined reference to `SDL_SetRenderDrawColor'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x886): undefined reference to `SDL_QueryTexture'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x90a): undefined reference to `SDL_RenderCopy'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x918): undefined reference to `SDL_RenderPresent'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x926): undefined reference to `SDL_FreeSurface'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x934): undefined reference to `SDL_DestroyTexture'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x942): undefined reference to `TTF_CloseFont'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x95d): undefined reference to `SDL_DestroyRenderer'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x96a): undefined reference to `SDL_DestroyWindow'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x96f): undefined reference to `SDL_Quit'
    c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../libmingw32.a(main.o):(.text.startup+0xc0): undefined reference to `WinMain@16'
    collect2.exe: error: ld returned 1 exit status
    
[/code]

環境 Windows 10

参考サイト:  
[C/C++のコンパイルについてメモ -
Qiita](https://qiita.com/edo_m18/items/9dfab147482b2ce31840)  
[C++ コンパイラオプション](https://docs.oracle.com/cd/E19957-01/806-4837/Rev.html)


CC BY-SA 4.0
2020-07-18T11:01:59.360
68702
2020-07-20T01:27:28.357
2020-07-18T18:21:06.397
2808
question
gcc mingw sdl
g++ コンパイラでライブラリのリンクを行うための -L -lオプションの使い方がわからない


`-L` および `-l` オプションを使う場合、続くディレクトリ名やライブラリ名は **スペースを挟まずに** 指定する必要があります。

**NGな例:**

[code]

    gcc -L dir ...
          ^
    
[/code]

**正しい例:**

[code]

    gcc -Ldir ...
    
[/code]


CC BY-SA 4.0
2020-07-18T11:57:38.507
68705
2020-07-18T11:57:38.507
3060
68702
answer


コンパイルオプションでは `-L../SDL2/lib/x64/` と指定されており64bitかのように見えますが、エラーメッセージでは

>
[code]

>     c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe:
> C:\Users\MATSUZ~1\AppData\Local\Temp\ccd88skb.o:Game.cpp:(.text+0x48):
> undefined reference to `TTF_Init'
>  
[/code]

と32bitリンカが動作しています。アーキテクチャを一致させましょう。

あと、ディレクトリ構成とファイル一覧を見る限りMinGW用ではなくVisual C++用を使用されているように見えます。コンパイラーも一致させましょう。  
Windows標準のVisual
C++では`SDL2.lib`等、拡張子は`.lib`となります。MinGWはこれに従っておらず独自形式で`libSDL2.a`等、拡張子は`.a`となります。

* * *

> g++ では拡張子を.aにする必要があってx32を指定するかg++でx64にするかしてくださいっていうことでいいのでしょうか？

使用するプラットフォーム、コンパイラーを定めてください。Windowsを使うのだとは思われますが、

  * x64とするのかx86とするのか
  * コンパイラーはVisual C++を使用するのか、MinGWを使用するのか

その上で、どこからモジュールを入手したのか質問文に記載がありませんが、[公式サイト](https://www.libsdl.org/download-2.0.php)には

  * SDL2-devel-2.0.12-VC.zip (Visual C++ 32/64-bit)
  * SDL2-devel-2.0.12-mingw.tar.gz (MinGW 32/64-bit)

が用意されているので、適切なものを導入してください。


CC BY-SA 4.0
2020-07-18T13:35:12.783
68708
2020-07-20T01:27:28.357
2020-07-20T01:27:28.357
4236
4236
68702
answer