crt1.o: dans la fonction 'start': - référence non définie à 'main' dans Linux

je transfère une application de Solaris à Linux

Les fichiers qui sont liés n'ont pas de main() définie. Mais la compilation et le lien se font correctement dans Solaris et l'exécutable est généré. Dans Linux, j'obtiens cette erreur

    /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main' 

mon problème est, Je ne peux pas inclure les nouveaux .C./o dossiers depuis son une application énorme et a été en cours d'exécution pendant des années. Comment puis-je me débarrasser de cette erreur?

Code extrait de makefile:

RPCAPPN = api
LINK = cc 

    $(RPCAPPN)_server: $(RPCAPIOBJ)
            $(LINK) -g $(RPCAPIOBJ) -o $(RPCAPPN)_server $(IDALIBS) $(LIBS) $(ORALIBS) $(COMMONLIB) $(LIBAPI) $(CCLIB) $(THREADLIB) $(DBSERVERLIB) $(ENCLIB)
26
demandé sur Blackforest 2012-06-20 13:19:00

4 réponses

Essayez d'ajouter -nostartfiles pour votre linker options, c'est à dire

$(LINK) -nostartfiles -g ...

documentation 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. 

Cela provoque crt1.o ne pas être lié (c'est normalement lié par défaut) - normalement utilisé uniquement lorsque vous implémentez votre propre _start code.

28
répondu Paul R 2012-06-20 10:41:21

-shared l'option link doit être utilisée lorsque vous compilez un .so

17
répondu user2783604 2018-09-20 21:24:14

j'ai eu un résultat similaire en essayant de construire un nouveau projet de test avec boost, et il s'est avéré que je manquais une déclaration :

#define BOOST_TEST_MODULE <yourtestName>
1
répondu serup 2016-10-06 07:07:52

pour moi, cette erreur apparaît quand on utilise des caractères bruts UTF-8 dans une chaîne littérale. ARM7HL, Sailfish OS, GNU C++.

0
répondu Pavel Řezníček 2016-12-09 06:11:04