使配方链接以避免对WinMain @ 16的未定义引用

时间:2014-08-19 20:32:54

标签: makefile g++ mingw undefined-reference winmain

感谢您提出我的问题。我花了很多时间检查帖子,但我仍然需要帮助。感谢您对我的耐心:)

我有一类调用Widows多媒体API的midi函数。

当我在命令行编译我的类Midf.h时,它编译并运行:

g++ -Wall Midf.h Midf.cpp midftest.cpp -lwinmm -o midftest2.exe

我编写了一个makefile,将这些函数包含在一个更大的程序中。

我建立Midf.o的方法如下:

 Midf.o: Midf.cpp Midf.h
              g++ -Wall Midf.cpp -lwinmm

此时我收到以下错误:

g++ -Wall Midf.cpp -lwinmm
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/lib/libmingw32.a(main.o): In function `main':
e:\p\giaw\src\pkg\mingwrt-4.0.3-1-mingw32-src\bld/../mingwrt-4.0.3-1-mingw32-src/src/libcrt/crt/main.c:91: undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
Makefile:21: recipe for target 'Midf.o' failed
make: *** [Midf.o] Error 1

我已经读过Mingw不支持wmain,但是通过确保main在命名空间之外正确定义,可以解决这个问题。我不知道该怎么做。

我很乐意发布整个makefile,我的文件包含main(),Midf.h Midf.cpp或源代码中的任何其他文件来查找问题。

顺便说一句,这是一个控制台程序,我尝试用MinGW和Cygwin构建它。

再次感谢所有愿意提供帮助的人!

1 个答案:

答案 0 :(得分:2)

将我的评论转化为答案:

如果你想进行单独的编译,你必须告诉gcc不要通过传递-c标志来链接你的对象。

你的第二个问题是在链接期间没有传递库,在编译期间传递它们没有任何效果。