TCC编译器:未定义符号“ main”

时间:2018-10-20 20:28:08

标签: c tcc

我正在尝试编译一个库,但是不断出现这些错误。不太好 熟悉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 :(得分:0)

两个错误:

  1. hello_data变量被声明为extern,这意味着该变量未在此程序模块中定义,因此需要来自其他地方,同时来自其他地方。
  2. 您的WinMain例程调用hello_func,但未定义。在C语言中,当您看到以();结尾的定义时,这意味着这是一个原型,用于告诉编译器期望的内容,而不是函数的实际代码。

我建议一开始,您打算启动一个控制台类型的应用程序,例如臭名昭​​著的hello世界,例如:

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

它将被编译并在MS Windows下的cmd窗口中运行。完成这项工作后,您可以考虑使用Windows环境和DLL中的WinMain之类的工具来做一些更奇妙的事情。