Компилятор TCC: неопределенный символ «main» - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь скомпилировать библиотеку, но продолжаю получать эти ошибки.Не слишком знаком с C и не знаю, как обойти это.Это не создает DLL.

c:\>C:\tcc\tcc.exe C:\tcc\examples\hello_dll.c -o C:\tcc\examples\test_win.dll
tcc: error: undefined symbol 'hello_data'
tcc: error: undefined symbol 'hello_func'
//+---------------------------------------------------------------------------
//
//  HELLO_DLL.C - Windows DLL example - main application part
//

#include <windows.h>

void hello_func (void);
__declspec(dllimport) extern const char *hello_data;

int WINAPI WinMain(
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR     lpCmdLine,
    int       nCmdShow)
{
hello_data = "Hello World!";
hello_func();
return 0;
}

1 Ответ

0 голосов
/ 21 октября 2018

Две ошибки:

  1. Объявлена ​​переменная hello_data extern, что означает, что она не определена в этом программном модуле, поэтому должна поступать откуда-то еще, откуда-то, что связано вв то же время.
  2. Ваша подпрограмма WinMain вызывает hello_func, но она не определена.В Си, когда вы видите определение, оканчивающееся на ();, это означает, что это прототип, сообщающий компилятору, чего ожидать, а не фактический код функции.

Я бы предложил начатьвы планируете запускать приложения консольного типа, такие как печально известный мир приветствия, что-то вроде:

#include <stdio.h>
int main()
{
    printf("Hello William\n");
}

Это будет скомпилировано и запущено в окне cmd под MS Windows.Когда вы начнете работать, вы можете заняться чем-то более привлекательным, используя среду Windows и такие вещи, как WinMain в DLL.

...