x86_64 usr start scrt1 returned lib función error collect2 0x20 linux main undefined-reference

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