crt1.o: В функции '_start': - неопределенная ссылка на 'main' в Linux
Я переношу приложение из Solaris в Linux
Связанные объектные файлы не имеют основной(). Но компиляция и привязка выполняются правильно в Solaris и генерируется исполняемый файл. В Linux я получаю эту ошибку
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: In function '_start':
(.text+0x20): undefined reference to 'main'
Моя проблема заключается в том, что я не могу включить новые.c/.o файлы с момента своего огромного приложения и работает уже много лет. Как я могу избавиться от этой ошибки?
Выделения кода makefile:
RPCAPPN = api
LINK = cc
$(RPCAPPN)_server: $(RPCAPIOBJ)
$(LINK) -g $(RPCAPIOBJ) -o $(RPCAPPN)_server $(IDALIBS) $(LIBS) $(ORALIBS) $(COMMONLIB) $(LIBAPI) $(CCLIB) $(THREADLIB) $(DBSERVERLIB) $(ENCLIB)
Ответы
Ответ 1
Попробуйте добавить -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
.
Ответ 2
Ссылка -shared должна добавляться, когда вы выполняете так
Ответ 3
У меня был схожий результат при попытке создать новый тестовый проект с boost, и оказалось, что мне не хватает одного объявления:
#define BOOST_TEST_MODULE <yourtestName>
Ответ 4
Для меня эта ошибка возникает при использовании необработанных символов UTF-8 в строковом литерале. ARM7HL, Sailfish OS, GNU C++.