crt1.o: в функции "пуск": - неопределенная ссылка на "main" в Linux

я переношу приложение из Solaris в Linux

связанные объектные файлы не имеют определенного main (). Но компиляция и связывание выполняется правильно в Solaris и генерируется исполняемый файл. В Linux я получаю эту ошибку

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

моя проблема в том, что я не могу включить новое .с./o файлы с момента его огромного приложения и работает в течение многих лет. Как я могу избавиться от этой ошибки?

extractes код в Makefile:

RPCAPPN = api
LINK = cc 

    $(RPCAPPN)_server: $(RPCAPIOBJ)
            $(LINK) -g $(RPCAPIOBJ) -o $(RPCAPPN)_server $(IDALIBS) $(LIBS) $(ORALIBS) $(COMMONLIB) $(LIBAPI) $(CCLIB) $(THREADLIB) $(DBSERVERLIB) $(ENCLIB)

4 ответов


попробуйте добавить -nostartfiles к вашим параметрам компоновщика, т. е.

$(LINK) -nostartfiles -g ...

С документация 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. 

это приводит к crt1.o не быть связанным (обычно он связан по умолчанию) - обычно используется только при реализации собственного _start код.


-shared опция link должна использоваться при компиляции .so


У меня был аналогичный результат при попытке создать новый тестовый проект с Boost, и оказалось, что мне не хватает одной декларации :

#define BOOST_TEST_MODULE <yourtestName>

для меня эта ошибка появляется при использовании необработанных символов UTF-8 в строковом литерале. ARM7HL, Sailfish OS, GNU C++.