Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile 制作配方链接以避免未定义的引用WinMain@16_Makefile_G++_Mingw_Undefined Reference_Winmain - Fatal编程技术网

Makefile 制作配方链接以避免未定义的引用WinMain@16

Makefile 制作配方链接以避免未定义的引用WinMain@16,makefile,g++,mingw,undefined-reference,winmain,Makefile,G++,Mingw,Undefined Reference,Winmain,谢谢你回答我的问题。我已经花了很多时间查看这方面的帖子,但我仍然需要帮助。谢谢你对我耐心:) 我有一类midi函数调用Widows多媒体API 当我在命令行编译类Midf.h时,它编译并工作: g++ -Wall Midf.h Midf.cpp midftest.cpp -lwinmm -o midftest2.exe 我已经编写了一个makefile,将这些函数包含在一个更大的程序中 我构建Midf.o的方法如下: Midf.o: Midf.cpp Midf.h

谢谢你回答我的问题。我已经花了很多时间查看这方面的帖子,但我仍然需要帮助。谢谢你对我耐心:)

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

当我在命令行编译类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构建它


再次感谢所有愿意帮忙的人

要将我的评论转化为答案:

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


您的第二个问题是在链接过程中没有传递库,在编译过程中传递它们没有任何效果。

如果您试图单独编译目标文件,您的
Midf.o
方法不正确,gcc认为您试图编译和链接一个完整的程序,您需要添加
-c
标志以在不链接的情况下编译。感谢用户657267。我添加了-c标志,这表明我有链接器错误。我所有的.o文件现在都可以编译了,包括Midf.oThanks user657267。我添加了-c标志,现在我所有的.o文件都可以编译了,包括Midf.o。不幸的是,编译器在Midf.o中返回了大量链接器错误。Midf.cpp包括Midf.h和mmsystem.h,但编译器报告了对windows Midi API函数的未定义引用。我尝试将-I/path/to/mmsystem.h甚至-I/to/libwinmm.a添加到中,但得到了相同的错误:Midf.o:Midf.cpp:(.text+0x30):未定义对
midiOutOpen@20'c:/mingw/bin/./lib/gcc/mingw32/4.8.1/../mingw32/bin/ld.exe:Midf.o:section
.ctors'中的错误重新链接地址0x0'有什么想法吗?如果上面发布的第一个示例有效,然后用
g++-c
分别编译每个
.cpp
文件,然后是
g++midfest.o midftest.o-lwinmm
一旦编译完所有单元,也应该可以工作,您可能需要发布完整的Makefile。似乎我有两个不同的问题: