编译出现errorundefined
‘壹’ C语言编译错误 undefined reference to `WinMain@16'
1、把主函数 main() 写成了mian()
2、没写主函数main()
3、建的不是控制台应用程序 console application
4、[code]
#include <allegro5/allegro.h>
int main() {
return 0;
}
[/code]
/*-------改成下面的形式, 供参考------*/
#include <allegro5/allegro.h>
int main()
{
return 0;
}
END_OF_MAIN()
// I don't use A5, so it's a guess.
(1)编译出现errorundefined扩展阅读:
注意事项
‘WinMain@16’”这里的真实错误所引起,所以只需关注前面出现了什么错误,将其改正就可以了。
退出状态(exit status)错误仅表示构建过程中的链接步骤遇到一些错误。通常退出状态为 0 表示成功,退出状态 > 0表示错误。
在构建程序时,可以将多个工具作为单独的步骤运行,以创建最终的可执行文件。在程序中,其中一个工具是ld,它首先报告它找到的错误(undefined reference to ‘WinMain@16’),然后它返回退出状态。
由于退出状态 > 0,表示错误并报告。 在许多情况下,返回的是发生错误的数量,因此,如果ld工具发现两个错误,其退出状态将为2。
‘贰’ 为什么会出现如:error:undefined reference to ‘
Linux下编译程序时,经常会遇到“undefined reference to XXX” 报错, 这里总结一些可能的原因和解决方案,给需要的朋友: 说道undefined reference error,先提一下Linux gcc链接规则: 链接的时候查找顺序是: -L 指定的路径, 从左到右依次查找 由 环境变量 LIBRARY_PATH 指定的路径,使用":"分割从左到右依次查找 /etc/ld.so.conf 指定的路径顺序 /lib 和 /usr/lib (64位下是/lib64和/usr/lib64) 动态库调用的查找顺序: ld的-rpath参数指定的路径, 这是写死在代码中的 ld脚本指定的路径 LD_LIBRARY_PATH 指定的路径 /etc/ld.so.conf 指定的路径 /lib和/usr/lib(64位下是/lib64和/usr/lib64) 一般情况链接的时候我们采用-L的方式指定查找路径, 调用动态链接库的时候采用LD_LIBRARY_PATH的方式指定链接路径. 另外注意一个问题,就是只要查找到第一个就会返回,后面的不会再查找. 比如-L./A -L./B -lx 在A中有libx.a B中有libx.a和libx.so, 这个时候会使用在./A的libx.a 而不会遵循动态库优先的原则,因为./A是先找到的,并且没有同名动态库存在 对于动态链接库,实际的符号定位是在运行期进行的.在编译.so的时候,如果没有把它需要的库和他一起进行联编,比如libx.so 需要使用uldict, 但是忘记在编译libx.so的时候加上-luldict的话,在编译libx.so的时候不会报错,因为这个时候libx.so被认为是一个库,它里面存在一些不知道具体实现的符号是合法的,是可以在运行期指定或者编译另外的二进制程序的时候指定. 如果是采用g++ -Lpath -lx 的方式进行编译,链接器会发现所需要的uldict的符号表找不到从而报错,但是如果是程序采用dlopen的方式载入,由于是运行期,这个程序在这个地方就直接运行报错了.另外还有一种情况就是一个对外的接口在动态库中已经声明定义了,但是忘记实现了,这个时候也会产生类似的错误. 如果在运行期报出这样的错误,就要注意是否是由于某些库没有链接进来或者某些接口没有实现的原因产生
‘叁’ C语言编译时出现error: undefined symbol 'GetDesktopWindow'是为什么
错误信息指出'GetDesktopWindow'这个符号没有定义。
出现这种现象大多是因为连接器找不到函数GetDesktopWindow的定义。引用头文件没有问题,那就是因为连接时没有找到包含GetDesktopWindow函数实现的库文件。
将包含GetDesktopWindow实现的库文件加入到连接器的搜索路径即可。