c++ - studio - LNK2019: símbolo externo no resuelto_mayor referenciado en la función___tmainCRTStartup
lnk2019 error visual studio (12)
Tengo el siguiente error LNK2019: símbolo externo no resuelto _la principal referenciada en la función ___tmainCRTStartup,
Hay muchos hilos relacionados con este error, pero ninguna de esas soluciones funcionó para mí. Y, ninguno explicó por qué este error está aquí.
Lo intenté:
- wWinMainCRTStartup como punto de entrada en las propiedades del vinculador http://social.msdn.microsoft.com/Forums/en/vclanguage/thread/14e85604-6929-4707-a22e-8cdf596926a6
- configura el enlazador a "Windows" (el mismo hilo que arriba)
- Haga clic con el botón derecho en el nombre de la solución-> Agregar-> Elemento existente-> archivo con main (el mismo hilo que arriba)
incluya el error LNK2019: símbolo externo no resuelto _mayor referenciado en la función ___tmainCRTStartup
- pruebe las propiedades de Project +, C / C ++, Generación de código, Comprobación de seguridad del búfer = No http://social.msdn.microsoft.com/Forums/hi-IN/vclanguage/thread/e2ea62c3-beb3-47a4-8963-60b799e3375a
- Opciones: C / C ++, generación de código, biblioteca de tiempo de ejecución = / MTd; C / C ++, generación de código, controles de tiempo de ejecución básicos = predeterminado; C / C ++, Generación de código, Comprobación de seguridad del búfer = No; Linker, Advanced, Entry Point = main http://social.msdn.microsoft.com/Forums/hi-IN/vclanguage/thread/e2ea62c3-beb3-47a4-8963-60b799e3375a
- los encabezados comentados en main.cpp, excepto "usar namespace std" y #include, dan como resultado un error en cascada y de bola de nieve de las funciones que hacen referencia a esos encabezados
- Eliminé todo en main.cpp excepto el código de prueba y excluí todos los archivos de origen excepto main.cpp; Como se esperaba, funcionó, así que un pequeño paso en la dirección correcta. El problema debe ser con uno de los archivos de encabezado.
- cree un nuevo proyecto con la plantilla de la aplicación Windows Win32 http://social.msdn.microsoft.com/Forums/ar-SA/vcgeneral/thread/105a366f-c38d-4c1c-9278-eca64589e7ca y http://social.msdn.microsoft.com/Forums/zh/Vsexpressvc/thread/341780c2-162e-4b36-9402-283c0cf7c0ac
No he probado y sospecho que estos tampoco funcionarán:
- use int main () (no estoy seguro de qué significan, nombre de archivo o nombre de la función principal) http://social.msdn.microsoft.com/Forums/zh/Vsexpressvc/thread/341780c2-162e-4b36-9402-283c0cf7c0ac
- usando cmake para compilar en windows 7 x64 http://hdf-forum.184993.n3.nabble.com/error-LNK2019-unresolved-external-symbol-main-referenced-in-function-tmainCRTStartup-td3138042.html
¿Por qué recibo este error y cuál es la solución?
¿Cuál es tu tipo de proyecto? Si es un "proyecto Win32", su punto de entrada debe ser (w)WinMain
. Si se trata de un "Proyecto de consola Win32", entonces debería ser (w)main
. El nombre _tmain
está # definido para ser main
o wmain
dependiendo de si UNICODE está definido o no.
Si es una DLL, entonces DllMain
.
El tipo de proyecto se puede ver en las propiedades del proyecto, vinculador, sistema, subsistema. Diría "Consola" o "Windows".
Tenga en cuenta que el nombre del punto de entrada varía según si UNICODE está definido o no. En VS2008, se define de forma predeterminada.
El prototipo adecuado para main es o bien
int _tmain(int argc, _TCHAR* argv[])
o
int _tmain()
Asegúrate de que sea uno de esos.
EDITAR:
Si está obteniendo un error en _TCHAR, coloque un
#include <tchar.h>
Si cree que el problema está relacionado con uno de los encabezados, vaya a las propiedades del archivo con main () y, en Preprocesador, active la generación del archivo preprocesado. Luego compila. Obtendrá un archivo con el mismo nombre que una extensión .i. Ábralo y vea si algo desagradable pasó con la función main (). Puede haber falsos #defines en teoría ...
EDIT2:
Con UNICODE definido (que es el valor predeterminado), el vinculador espera que el punto de entrada sea wmain (), no main (). _tmain tiene la ventaja de ser un UNICODE-agnóstico - se traduce a main o wmain.
Hace algún tiempo, había una razón para mantener tanto una compilación ANSI como una compilación Unicode. El soporte de Unicode estaba bastante incompleto en Windows 95/98 / Me. Las API principales eran ANSI, y las versiones de Unicode existían aquí y allá, pero no de manera generalizada. Además, el depurador de VS tuvo problemas para mostrar cadenas Unicode. En los sistemas operativos del kernel NT (es decir, Windows 2000 / XP / Vista / 7/8/10), el soporte de Unicode es primario y las funciones ANSI se agregan en la parte superior. Así que desde VS2005, el valor predeterminado en la creación del proyecto es Unicode. Eso significa - wmain. No pudieron mantener el mismo nombre de punto de entrada porque los tipos de parámetros son diferentes. _TCHAR está # definido para ser char o wchar_t. Así que _tmain es main (int argc, char ** argv) o wmain (int argc, wchar_t ** argv).
La razón por la que recibió un error en _tmain
en algún momento fue probablemente porque no cambió el tipo de _TCHAR**
a _TCHAR**
.
Si no planea tener soporte para ANSI (probablemente no), puede reformular su punto de entrada como
int wmain(int argc, wchar_t *argv[])
y retire la línea tchar.h
include.
Encuentro que cuando elijo la opción de Proyecto-> Propiedades-> Vinculador-> Sistema-> Subsistema-> Consola (/ subsistema: consola), y luego me aseguro de incluir la función: int _tmain (int argc, _TCHAR * argv [] ) {return 0} toda la compilación, enlace y ejecución estarán bien;
Este trabajo main
funciona tanto en Linux como en Windows: lo encontré por prueba y error y la ayuda de otros, así que no puedo explicar por qué funciona, simplemente lo hace int main(int argc, char** argv)
no tchar.h
necesario
Y aquí está la misma respuesta en la función principal de Wikipedia .
Esto también sucedió en Visual Studio 2015 por una razón interesante. Solo agregándolo aquí en caso de que le pase a alguien más.
Ya tenía un número de archivos en el proyecto y estaba agregando otro que tendría la función principal, sin embargo, cuando inicialmente agregué el archivo hice un error tipográfico en la extensión (.coo en lugar de .cpp). Corrigí eso, pero cuando terminé, recibí este error. Resultó que Visual Studio era inteligente y, cuando se agregó el archivo, decidió que no era un archivo fuente debido a la extensión inicial.
Al hacer clic con el botón derecho en el archivo en el explorador de soluciones y seleccionar Propiedades -> General -> Tipo de elemento y configurarlo como "compilador C / C ++", se solucionó el problema.
Porque no se ha mencionado aún, esta fue la solución para mí:
Tuve este error con una DLL después de crear una nueva configuración para mi proyecto. Tuve que ir a Project Properties -> Configuration Properties -> General
y cambiar el Configuration Type
a Dynamic Library (.dll)
.
Entonces, si aún tiene problemas después de probar todo lo demás, vale la pena verificar si el tipo de configuración es el que espera para su proyecto. Si no se configura correctamente, el compilador buscará el símbolo principal incorrecto. En mi caso, estaba buscando WinMain
lugar de DllMain
.
Recibí este error mientras intentaba desactivar los encabezados precompilados en un Proyecto de aplicación de consola y eliminando el archivo de encabezado stdafx.h
Para solucionar esto, vaya a las propiedades de su proyecto -> Vinculador -> Subsistema y cambie el valor a No establecido
En su clase principal, use el protoype de la función principal de C ++ estándar que otros ya han mencionado:
int main(int argc, char** argv)
Si tiene un "proyecto Win32" + definido un WinMain y su configuración del enlazador del subsistema se establece en WINDOWS, todavía puede obtener este error del enlazador en caso de que alguien establezca las "Opciones adicionales" en las configuraciones del enlazador a "/ SUBSISTEMA: CONSOLA" (parece Al igual que esta configuración adicional, se prefiere la configuración del subsistema real.
Tuve el problema antes, pero fue resuelto. El problema principal fue que deletreé erróneamente la función int main (). En lugar de escribir int main () escribí int mian () .... ¡Saludos!
Tuve este error al poner accidentalmente el dominio dentro de un espacio de nombres. wmain no debe estar en ningún espacio de nombres. Además, tenía una función principal en una de las libretas que estaba usando, y VS tomó la principal desde allí, lo que la hacía aún más extraña.
Tuve este problema hace unos minutos. Se fue cuando agregué ''extern "C" a la definición main ().
Curiosamente, otro programa simple que escribí ayer es casi idéntico, no tiene la "C" externa, pero se compila sin este error de vinculador.
Esto me hace pensar que el problema es una configuración sutil que se encuentra en lo profundo de un diálogo de configuración, y que ''extern "C" no resuelve realmente el problema subyacente, sino que superficialmente hace que las cosas funcionen.
En mi caso, es porque stdafx.h
accidentalmente (no stdafx.h
) los archivos stdafx.h
y targetver.h
en la sección Archivos de encabezado .
Vuelva a agregar estos archivos a los archivos de encabezado y se solucionará el problema.
Tuve estos:
#pragma comment( linker, "/entry:/"mainCRTStartup/"" ) // set the entry point to be main()
Solo necesito comentar eso (anteponiendo //
) y es bueno.