cl.exe メモ

cl.exe をコマンドラインで叩く際のメモ。


# コンパイルエラー

##  やや初歩的なやつ

```
Z:\SAGYOBA\for_SPH\sph_dropletmaker_gpu\GL_viewer\src\readParticles.h(446,21): error C2039: 'filesystem': 'std' のメンバーではありません
```
（※ include<filesystem> の書き忘れではない。）
→　コンパイルオプション「/std:c++17」 あたりを追加で解消。

## 不思議エラー

#### 構文エラー
```
Z:\SAGYOBA\for_SPH\sph_dropletmaker_gpu\GL_viewer\src\concavehull.h(138,45): error C4596: 'countface_tetra_result': メンバー宣言内の限定名が間違っています。
    int* Concavehull::countface_tetra_result(
                                            ^
Z:\SAGYOBA\for_SPH\sph_dropletmaker_gpu\GL_viewer\src\glview3d_display.h(514,9): error C2059: 構文エラー: '||'
 glfwGetWindowSize(window_glfw, &width, &height)
        ^
Z:\SAGYOBA\for_SPH\sph_dropletmaker_gpu\GL_viewer\src\glview3d_display.h(519,14): error C2059: 構文エラー: '||'
Z:\SAGYOBA\for_SPH\sph_dropletmaker_gpu\GL_viewer\src\glview3d_display.h(523,51): error C2059: 構文エラー: '||'
make: *** [particleViewer] エラー 2
```

→　コンパイルオプション「/permissive」 で消えた。


# リンカエラー

## 競合の警告とエラー
リンク処理で競合の警告が多量に出た後、「未解決の外部シンボル～」でエラー終了する。

##### 例えばこういうの　↓

```
LINK : warning LNK4098: defaultlib 'MSVCRT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
```
```
LINK : warning LNK4217: シンボル 'strncmp' ('libucrt.lib(strncmp.obj)' で定義) が 'glfw3.lib(init.obj)' によって関数 '_glfwParseUriList' 内でインポートされています
LINK : warning LNK4286: シンボル 'strncmp' ('libucrt.lib(strncmp.obj)' で定義) が 'glfw3.lib(context.obj)' によってインポートされています
LINK : warning LNK4286: シンボル 'strncmp' ('libucrt.lib(strncmp.obj)' で定義) が 'glfw3.lib(input.obj)' によってインポートされています
LINK : warning LNK4217: シンボル 'strncmp' ('libucrt.lib(strncmp.obj)' で定義) が 'glfw3.lib(egl_context.obj)' によって関数 '_glfwCreateContextEGL' 内でインポートされています
LINK : warning LNK4286: シンボル 'calloc' ('libucrt.lib(calloc.obj)' で定義) が 'glfw3.lib(win32_joystick.obj)' によってインポートされています
LINK : warning LNK4217: シンボル 'calloc' ('libucrt.lib(calloc.obj)' で定義) が 'glfw3.lib(wgl_context.obj)' によって関数 '_glfwCreateContextWGL' 内でインポートされています
LINK : warning LNK4217: シンボル 'calloc' ('libucrt.lib(calloc.obj)' で定義) が 'glfw3.lib(egl_context.obj)' によって関数 '_glfwCreateContextEGL' 内でインポートされています
LINK : warning LNK4286: シンボル 'calloc' ('libucrt.lib(calloc.obj)' で定義) が 'glfw3.lib(osmesa_context.obj)' によってインポートされています
LINK : warning LNK4286: シンボル 'calloc' ('libucrt.lib(calloc.obj)' で定義) が 'glfw3.lib(win32_window.obj)' によってインポートされています
LINK : warning LNK4217: シンボル 'calloc' ('libucrt.lib(calloc.obj)' で定義) が 'glfw3.lib(win32_init.obj)' によって関数 '_glfwPlatformInit' 内でインポートされています
LINK : warning LNK4217: シンボル 'calloc' ('libucrt.lib(calloc.obj)' で定義) が 'glfw3.lib(win32_monitor.obj)' によって関数 'createMonitor' 内でインポートされています
LINK : warning LNK4217: シンボル 'calloc' ('libucrt.lib(calloc.obj)' で定義) が 'glfw3.lib(vulkan.obj)' によって関数 '_glfwGetVulkanResultString' 内でインポートされています
LINK : warning LNK4217: シンボル 'calloc' ('libucrt.lib(calloc.obj)' で定義) が 'glfw3.lib(init.obj)' によって関数 '_glfwInputError' 内でインポートされています
LINK : warning LNK4286: シンボル 'calloc' ('libucrt.lib(calloc.obj)' で定義) が 'glfw3.lib(window.obj)' によってインポートされています
LINK : warning LNK4286: シンボル 'calloc' ('libucrt.lib(calloc.obj)' で定義) が 'glfw3.lib(monitor.obj)' によってインポートされています
LINK : warning LNK4286: シンボル 'calloc' ('libucrt.lib(calloc.obj)' で定義) が 'glfw3.lib(input.obj)' によってインポートされています
LINK : warning LNK4286: シンボル 'free' ('libucrt.lib(free.obj)' で定義) が 'glfw3.lib(win32_joystick.obj)' によってインポートされています
LINK : warning LNK4286: シンボル 'free' ('libucrt.lib(free.obj)' で定義) が 'glfw3.lib(wgl_context.obj)' によってインポートされています
LINK : warning LNK4286: シンボル 'free' ('libucrt.lib(free.obj)' で定義) が 'glfw3.lib(egl_context.obj)' によってインポートされています
LINK : warning LNK4286: シンボル 'free' ('libucrt.lib(free.obj)' で定義) が 'glfw3.lib(osmesa_context.obj)' によってインポートされています
LINK : warning LNK4286: シンボル 'free' ('libucrt.lib(free.obj)' で定義) が 'glfw3.lib(win32_window.obj)' によってインポートされています
LINK : warning LNK4217: シンボル 'free' ('libucrt.lib(free.obj)' で定義) が 'glfw3.lib(win32_init.obj)' によって関数 '_glfwPlatformTerminate' 内でインポートされています
LINK : warning LNK4217: シンボル 'free' ('libucrt.lib(free.obj)' で定義) が 'glfw3.lib(win32_monitor.obj)' によって関数 '_glfwGetMonitorContentScaleWin32' 内でインポートされています
LINK : warning LNK4217: シンボル 'free' ('libucrt.lib(free.obj)' で定義) が 'glfw3.lib(vulkan.obj)' によって関数 '_glfwGetVulkanResultString' 内でインポートされています
LINK : warning LNK4217: シンボル 'free' ('libucrt.lib(free.obj)' で定義) が 'glfw3.lib(init.obj)' によって関数 'terminate' 内でインポートされています
LINK : warning LNK4286: シンボル 'free' ('libucrt.lib(free.obj)' で定義) が 'glfw3.lib(window.obj)' によってインポートされています
LINK : warning LNK4286: シンボル 'free' ('libucrt.lib(free.obj)' で定義) が 'glfw3.lib(monitor.obj)' によってインポートされています
LINK : warning LNK4286: シンボル 'free' ('libucrt.lib(free.obj)' で定義) が 'glfw3.lib(input.obj)' によってインポートされています
LINK : warning LNK4217: シンボル 'strtol' ('libucrt.lib(strtox.obj)' で定義) が 'glfw3.lib(init.obj)' によって関数 '_glfwParseUriList' 内でインポートされています
LINK : warning LNK4217: シンボル '__stdio_common_vsprintf' ('libucrt.lib(output.obj)' で定義) が 'glfw3.lib(init.obj)' によって関数 '_glfwInputError' 内でインポートされています
LINK : warning LNK4217: シンボル '__stdio_common_vsprintf' ('libucrt.lib(output.obj)' で定義) が 'glfw3.lib(win32_joystick.obj)' によって関数 '_glfwInitJoysticksWin32' 内でインポートされています
LINK : warning LNK4217: シンボル 'strncpy' ('libucrt.lib(strncpy.obj)' で定義) が 'glfw3.lib(window.obj)' によって関数 'glfwWindowHintString' 内でインポートされています
LINK : warning LNK4286: シンボル 'strncpy' ('libucrt.lib(strncpy.obj)' で定義) が 'glfw3.lib(monitor.obj)' によってインポートされています
LINK : warning LNK4286: シンボル 'strncpy' ('libucrt.lib(strncpy.obj)' で定義) が 'glfw3.lib(input.obj)' によってインポートされています
LINK : warning LNK4286: シンボル 'strncpy' ('libucrt.lib(strncpy.obj)' で定義) が 'glfw3.lib(win32_joystick.obj)' によってインポートされています
LINK : warning LNK4217: シンボル '__stdio_common_vsscanf' ('libucrt.lib(input.obj)' で定義) が 'glfw3.lib(context.obj)' によって関数 'sscanf' 内でインポートされています
LINK : warning LNK4217: シンボル 'qsort' ('libucrt.lib(qsort.obj)' で定義) が 'glfw3.lib(monitor.obj)' によって関数 'refreshVideoModes' 内でインポートされています
LINK : warning LNK4217: シンボル 'qsort' ('libucrt.lib(qsort.obj)' で定義) が 'glfw3.lib(win32_joystick.obj)' によって関数 '_glfwInitJoysticksWin32' 内でインポートされています
LINK : warning LNK4217: シンボル 'strtoul' ('libucrt.lib(strtox.obj)' で定義) が 'glfw3.lib(input.obj)' によって関数 'parseMapping' 内でインポートされています
```
```
glfw3.lib(init.obj) : error LNK2019: 未解決の外部シンボル __imp_strtok が関数 _glfwParseUriList で参照されました
glfw3.lib(init.obj) : error LNK2019: 未解決の外部シンボル __imp_realloc が関数 _glfwParseUriList で参照されました
glfw3.lib(monitor.obj) : error LNK2001: 外部シンボル __imp_realloc は未解決です
glfw3.lib(input.obj) : error LNK2001: 外部シンボル __imp_realloc は未解決です
glfw3.lib(win32_monitor.obj) : error LNK2001: 外部シンボル __imp_realloc は未解決です
glfw3.lib(input.obj) : error LNK2019: 未解決の外部シンボル __imp_strcspn が関数 glfwUpdateGamepadMappings で参照されました
glfw3.lib(input.obj) : error LNK2019: 未解決の外部シンボル __imp_strspn が関数 glfwUpdateGamepadMappings で参照されました
example_glfw_opengl2.exe : fatal error LNK1120: 4 件の未解決の外部参照
make: *** [example_glfw_opengl2.exe] エラー 2
```

##### 対処法（※コンパイルからやり直せる場合）
コンパイル段階に戻って、オプション 「/MD」 を追加で再コンパイル。
⇒　後のリンク処理が正常になった。


### ランタイムの不一致
↓　こういうのがいっぱい出る。

```
qhullcpp.lib(PointCoordinates.obj) : error LNK2038: 'RuntimeLibrary' の不一致が検出されました。値 'MT_StaticRelease' が MD_DynamicRelease の値 'glview3d.obj' と一致しません。
```
→　コンパイル段階の「/MD /MT」とかで対処、ライブラリを作り直し必要かも。