tcc: error: undefined symbol '_GetConsoleWindow@0'
tcc: error: undefined symbol '_GetConsoleWindow@0'
我正在 C/C++ 中制作一个程序,它必须 运行 使用此代码隐藏:
#define _WIN32_WINNT 0x0500
#include <windows.h>
int main(){
HWND hWnd = GetConsoleWindow();
ShowWindow(hWnd, SW_HIDE);
. . .
}
我很想用tinyc来编译它,因为它比gcc好很多(几乎,最终的可执行文件比gcc小很多)。
关键是当我尝试使用编译它时:
tcc PROGRAM.c -luser32
它会出错:
tcc: error: undefined symbol '_GetConsoleWindow@0'
但是当我使用 gcc 时它可以工作!我想我错过了一个图书馆,但我不知道是哪个。
请帮忙:)
根据 MSDN,GetConsoleWindow
位于 Kernel32.dll
尝试:
tcc PROGRAM.c -luser32 -lkernel32
编辑:
tcc 的 kernel32.def
缺少 GetConsoleWindow
的导出。
在位于 tcc 安装文件夹内 lib
目录的 def 文件末尾附加字符串 GetConsoleWindow。
从 C:\tcc\lib
中删除 gdi32.def kernel32.def msvcrt.def user32.def
个文件;从 C:\tcc\lib
中删除所有 .def
个文件
#include <windows.h>
#include <wincon.h>
#include <stdio.h>
#include <conio.h>
void main()
{
HWND hwnd;
hwnd = GetConsoleWindow();
HDC hdc;
hdc = GetWindowDC(hwnd);
printf("console hwnd: %p\n", hwnd);
printf("console hdc: %p\n", hdc);
HPEN hPenNull, hPenBlack, hPenRed, hPenGreen, hPenBlue;
hPenNull=GetStockObject(NULL_PEN);
hPenBlack=CreatePen(PS_SOLID, 2, RGB(0,0,0));
hPenRed=CreatePen(PS_SOLID, 2, RGB(255,0,0));
hPenGreen=CreatePen(PS_SOLID, 2, RGB(0,255,0));
hPenBlue=CreatePen(PS_SOLID, 2, RGB(0,0,255));
HBRUSH hBrushNull, hBrushBlack, hBrushRed, hBrushGreen, hBrushBlue, hBrushYellow;
hBrushNull=GetStockObject(NULL_BRUSH);
hBrushBlack=CreateSolidBrush(RGB(0,0,0));
hBrushRed=CreateSolidBrush(RGB(255,0,0));
hBrushYellow=CreateSolidBrush(RGB(255,255,0));
hBrushGreen=CreateSolidBrush(RGB(0,255,0));
hBrushBlue=CreateSolidBrush(RGB(0,0,255));
SelectObject(hdc, hPenRed);
SelectObject(hdc, hBrushYellow);
Ellipse(hdc, 200,50,260,150);
SelectObject(hdc, hPenNull);
SelectObject(hdc, hBrushRed);
Ellipse(hdc, 140, 80, 180, 120);
SelectObject(hdc, hPenBlue);
SelectObject(hdc, hBrushNull);
Ellipse(hdc, 280, 50, 340, 150);
getch();
}
-L"C:\tcc\lib" -lkernel32 -luser32 -lgdi32 -Wl,-subsystem=console
我正在 C/C++ 中制作一个程序,它必须 运行 使用此代码隐藏:
#define _WIN32_WINNT 0x0500
#include <windows.h>
int main(){
HWND hWnd = GetConsoleWindow();
ShowWindow(hWnd, SW_HIDE);
. . .
}
我很想用tinyc来编译它,因为它比gcc好很多(几乎,最终的可执行文件比gcc小很多)。
关键是当我尝试使用编译它时:
tcc PROGRAM.c -luser32
它会出错:
tcc: error: undefined symbol '_GetConsoleWindow@0'
但是当我使用 gcc 时它可以工作!我想我错过了一个图书馆,但我不知道是哪个。
请帮忙:)
根据 MSDN,GetConsoleWindow
位于 Kernel32.dll
尝试:
tcc PROGRAM.c -luser32 -lkernel32
编辑:
tcc 的 kernel32.def
缺少 GetConsoleWindow
的导出。
在位于 tcc 安装文件夹内 lib
目录的 def 文件末尾附加字符串 GetConsoleWindow。
从 C:\tcc\lib
中删除 gdi32.def kernel32.def msvcrt.def user32.def
个文件;从 C:\tcc\lib
.def
个文件
#include <windows.h>
#include <wincon.h>
#include <stdio.h>
#include <conio.h>
void main()
{
HWND hwnd;
hwnd = GetConsoleWindow();
HDC hdc;
hdc = GetWindowDC(hwnd);
printf("console hwnd: %p\n", hwnd);
printf("console hdc: %p\n", hdc);
HPEN hPenNull, hPenBlack, hPenRed, hPenGreen, hPenBlue;
hPenNull=GetStockObject(NULL_PEN);
hPenBlack=CreatePen(PS_SOLID, 2, RGB(0,0,0));
hPenRed=CreatePen(PS_SOLID, 2, RGB(255,0,0));
hPenGreen=CreatePen(PS_SOLID, 2, RGB(0,255,0));
hPenBlue=CreatePen(PS_SOLID, 2, RGB(0,0,255));
HBRUSH hBrushNull, hBrushBlack, hBrushRed, hBrushGreen, hBrushBlue, hBrushYellow;
hBrushNull=GetStockObject(NULL_BRUSH);
hBrushBlack=CreateSolidBrush(RGB(0,0,0));
hBrushRed=CreateSolidBrush(RGB(255,0,0));
hBrushYellow=CreateSolidBrush(RGB(255,255,0));
hBrushGreen=CreateSolidBrush(RGB(0,255,0));
hBrushBlue=CreateSolidBrush(RGB(0,0,255));
SelectObject(hdc, hPenRed);
SelectObject(hdc, hBrushYellow);
Ellipse(hdc, 200,50,260,150);
SelectObject(hdc, hPenNull);
SelectObject(hdc, hBrushRed);
Ellipse(hdc, 140, 80, 180, 120);
SelectObject(hdc, hPenBlue);
SelectObject(hdc, hBrushNull);
Ellipse(hdc, 280, 50, 340, 150);
getch();
}
-L"C:\tcc\lib" -lkernel32 -luser32 -lgdi32 -Wl,-subsystem=console