usr - crt1.o: en la función `_start '':-referencia no definida a` main'' en Linux
text 0x20): undefined reference to main collect2 error ld returned 1 exit status (4)
Estoy portando una aplicación de Solaris a Linux
Los archivos de objeto que están vinculados no tienen un main () definido. Pero la compilación y la vinculación se realizan correctamente en Solaris y se genera el ejecutable. En Linux me sale este error.
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: In function `_start'':
(.text+0x20): undefined reference to `main''
Mi problema es que no puedo incluir nuevos archivos .c / .o, ya que es una aplicación enorme y se ha estado ejecutando durante años. ¿Cómo puedo deshacerme de este error?
Extracto de código de makefile:
RPCAPPN = api
LINK = cc
$(RPCAPPN)_server: $(RPCAPIOBJ)
$(LINK) -g $(RPCAPIOBJ) -o $(RPCAPPN)_server $(IDALIBS) $(LIBS) $(ORALIBS) $(COMMONLIB) $(LIBAPI) $(CCLIB) $(THREADLIB) $(DBSERVERLIB) $(ENCLIB)
Intente agregar -nostartfiles
a sus opciones de vinculador, es decir
$(LINK) -nostartfiles -g ...
De la documentación de gcc :
-nostartfiles
Do not use the standard system startup files when linking. The standard system libraries are used normally, unless -nostdlib or -nodefaultlibs is used.
Esto hace que crt1.o
no esté vinculado (normalmente está vinculado de forma predeterminada), normalmente solo se utiliza cuando implementa su propio código _start
.
Para mí, este error aparece cuando se utilizan caracteres UTF-8 sin procesar en un literal de cadena. ARM7HL, Sailfish OS, GNU C ++.
Tuve un resultado similar al intentar construir un nuevo proyecto de prueba con impulso, y resultó que me faltaba una declaración:
#define BOOST_TEST_MODULE <yourtestName>
-shared
opción de enlace -shared
debe usarse cuando compila un .so