通用應用編譯出錯
(金慶的專欄)
編譯lua5.3.2 Windows靜態庫時,創建VS2015工程時選擇了
Visual C++ -> Windows 通用 -> 靜態庫(通用 Windows).
結果再選擇按C++編譯時報錯:
lua-5.3.2\src\loslib.c(132): error C3861: “system”: 找不到標識符
跳到system()的定義:
// APIs Only Available in Desktop Apps
#ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP
...
int __cdecl system(...);
...
#endif // _CRT_USE_WINAPI_FAMILY_DESKTOP_APP
看上去必須是桌面應用才有system()。
以前用premake5生成的工程是能順利編譯的。
于是又新建了premake5腳本來生成另一個工程,比較發現通用項目文件有:
<AppContainerApplication>true</AppContainerApplication>
<ApplicationType>Windows Store</ApplicationType>
打開項目屬性,看到
目標平臺:Windows 10
并且不可更改。
而Premake5生成的項目目標平臺為 Windows, 也是不可更改。
這樣就明白了應該是工程創建時選錯了模板。
仔細查看,原來 Win32 項目包含了Dll和靜態庫,不應該與Window通用搞混。
Window通用應用應該是Win10跨桌面與移動設備的應用。
(金慶的專欄)
編譯lua5.3.2 Windows靜態庫時,創建VS2015工程時選擇了
Visual C++ -> Windows 通用 -> 靜態庫(通用 Windows).
結果再選擇按C++編譯時報錯:
lua-5.3.2\src\loslib.c(132): error C3861: “system”: 找不到標識符
跳到system()的定義:
// APIs Only Available in Desktop Apps
#ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP
...
int __cdecl system(...);
...
#endif // _CRT_USE_WINAPI_FAMILY_DESKTOP_APP
看上去必須是桌面應用才有system()。
以前用premake5生成的工程是能順利編譯的。
于是又新建了premake5腳本來生成另一個工程,比較發現通用項目文件有:
<AppContainerApplication>true</AppContainerApplication>
<ApplicationType>Windows Store</ApplicationType>
打開項目屬性,看到
目標平臺:Windows 10
并且不可更改。
而Premake5生成的項目目標平臺為 Windows, 也是不可更改。
這樣就明白了應該是工程創建時選錯了模板。
仔細查看,原來 Win32 項目包含了Dll和靜態庫,不應該與Window通用搞混。
Window通用應用應該是Win10跨桌面與移動設備的應用。