1

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

我有一类调用 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 构建它。

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

4

1 回答 1

2

To turn my comments into an answer:

If you want to perform separate compilation you have to tell gcc not to link your objects by passing the -c flag.

Your second problem was not passing the libraries during linking, passing them during compilation has no effect.

于 2014-08-21T03:02:02.483 回答