Неопределенный символ _main в TC [закрыт]

У меня есть 4 файла .c, один называется main.c с main(), но я получаю сообщение об ошибке связывания «неопределенный символ _main в модуле c0.ASM». Я использую ТС.

Я искал на этом сайте и в Интернете и нашел такие вещи, как:

неопределенный символ для архитектуры x86_64 при компиляции программы C

неопределенный символ _main в модуле c0.ASM

но все они кажутся ошибками gcc или c++. Файлы слишком велики для вставки сюда, поэтому я загрузил их на mediafire.

#include <stdio.h>
#include <string.h>
#include "mpx.h"

int main()
{
return 0;
}

Если я удалю #include "MPX.H", я потеряю доступ ко всем общим переменным, определенным в mpx.h, но если я также избавлюсь от них всех, программа будет работать как надо (выводит оператор и возвращает 1.

mpx.ч:

http://www.mediafire.com/view/2pcxhwy9rwk9lls/MPX.H

параметры компилятора: обрабатывать перечисления как целые, эмуляция с плавающей запятой, генерировать подчеркивания, отладочная информация в objs, быстрая плавающая запятая

параметры компоновщика: библиотеки по умолчанию, предупреждение "нет стека", ссылка с учетом регистра, вывод - стандартный EXE


person Augustine Tighe    schedule 20.11.2015    source источник
comment
почему ты до сих пор пользуешься ТС? Ему вроде больше 10 лет.   -  person Haris    schedule 20.11.2015
comment
@Haris Я бы сказал, 25. Серьезно, я не понимаю аналогии, если вы не используете 25-летний ПК, телефон или автомобиль, зачем компилятор?   -  person Sourav Ghosh    schedule 20.11.2015
comment
Сама программа не является интересной информацией здесь. Более интересно было бы узнать, как вы компилируете свою программу. Поделитесь командами компиляции.   -  person M Oehm    schedule 20.11.2015
comment
Я должен. У него есть специальные функции, которые позволяют мне получить доступ к раннему оборудованию на старых машинах MS-DOS.   -  person Augustine Tighe    schedule 20.11.2015
comment
Я использовал TC еще в 1989-90 годах, вам следует серьезно обновиться, есть много хороших бесплатных компиляторов. Например. sourceforge.net/projects/tdm-gcc/files/TDM-GCC %20Установщик   -  person AndersK    schedule 20.11.2015
comment
Turbo C до сих пор используется для разработки встраиваемых систем во многих инженерных мастерских. Сумасшедший, но верный.   -  person selbie    schedule 20.11.2015
comment
Попробуйте поставить printf после инициализации переменных. Попробуйте также void main(), чтобы увидеть, поможет ли это?   -  person DU Jiaen    schedule 20.11.2015
comment
@MOehm Я понятия не имею, что это за команды. Я использую Borland C++ 3.0 (4.0) в DOSBox.   -  person Augustine Tighe    schedule 20.11.2015
comment
@DUJiaen Только что сделал это, та же ошибка компоновщика.   -  person Augustine Tighe    schedule 20.11.2015
comment
Я подозреваю, что в заголовочном файле mpx.h может быть ошибочная точка с запятой или что-то подобное (например, незакрытый комментарий); это, безусловно, аннулирует определение main(), что приведет к тому, что компоновщик будет жаловаться на то, что _main является неопределенным символом. Дважды проверьте и, возможно, (если не слишком долго) также опубликуйте свой заголовочный файл).   -  person    schedule 20.11.2015
comment
Может ли быть что-то в конце "mpx.h" определения, которое съедает вас main? (Здесь хватается за соломинку.)   -  person M Oehm    schedule 20.11.2015
comment
@Evert Отредактировано. Он довольно длинный, поэтому было сложно попытаться отформатировать его для публикации.   -  person Augustine Tighe    schedule 20.11.2015
comment
@MOehm Проверьте правку.   -  person Augustine Tighe    schedule 20.11.2015
comment
Я не вижу ничего очевидного в mpx.h, что могло бы вызвать это.   -  person    schedule 20.11.2015
comment
Есть ли способ увидеть, какие команды выполняются в фоновом режиме при сборке проекта? Некоторый уровень ведения журнала, который можно увеличить. Было бы неплохо посмотреть, включает ли компоновщик все уровни объектов и как компилируются сами объектные файлы (ах, я люблю командную строку для таких вещей).   -  person    schedule 20.11.2015
comment
@Evert снова отредактировал. Это вся информация, которую дает мне Borland IDE.   -  person Augustine Tighe    schedule 20.11.2015
comment
Я вижу ваше редактирование с параметрами компилятора и компоновщика. Нам, однако, более любопытно, что на самом деле компилируется и компонуется: фактические команды, которые выполняются за кулисами. Есть ли шанс, что вы можете увидеть их в каком-то выходном окне / файле журнала?   -  person    schedule 20.11.2015
comment
@SouravGhosh не уверен, что это подходящая аналогия - вы не загрузите машину, но вы загрузите компилятор!   -  person M.M    schedule 20.11.2015
comment
Этот вопрос должен включать MCVE. Программа int main() { return 0; } выдает такую ​​же ошибку? Если это так, то остальная часть кода не имеет значения. Если нет, то добавляйте биты реального кода, пока ошибка не начнет происходить.   -  person M.M    schedule 20.11.2015
comment
Похоже на тот же вопрос, что и этот, который вы отклоняете как С++ вопрос, несмотря на то, что это вопрос C   -  person M.M    schedule 20.11.2015
comment
@M.M, но ты управляешь ими обоими, не так ли? ;)   -  person Sourav Ghosh    schedule 20.11.2015
comment
@SouravGhosh Вряд ли. Заставить 25-летний автомобиль или Turbo C даже завестись будет непросто, и вы, вероятно, не уедете далеко, если они не сломаются. Разница в том, что когда вы разъезжаете на своей 25-летней машине, никто не предложит вам Lamborghini бесплатно, а если и предложит, то будет глупо отказываться. Однако, когда вы путешествуете в Turbo C, я предложу вам бесплатный GCC.   -  person Lundin    schedule 20.11.2015
comment
@Augustine Tighe Прошло 20 лет, но это связано с неработающим проектом. Компилятор, вероятно, даже не может найти файл с размещенным вами кодом. Я думаю, вам, возможно, придется указать путь, по которому должен искать компилятор. В противном случае создайте новый проект, добавьте чистый файл main.c, в котором нет ничего, кроме int main (void) { return 0; }, а затем возьмите его оттуда.   -  person Lundin    schedule 20.11.2015
comment
@MM да, int main () {return 0; } дает ту же ошибку. в школе я использую MS-DOS 7.1 или 2, а на своем ноутбуке я использую DOSBox 0.74.   -  person Augustine Tighe    schedule 20.11.2015
comment
@AugustineTighe Хорошо, не могли бы вы обновить свой вопрос, чтобы он содержал как можно меньше кода, который все еще выдает ошибку. Также было бы хорошо показать параметры вашего компилятора (желательно в виде командной строки, но я не могу вспомнить, показывает ли это окно сборки TC)   -  person M.M    schedule 20.11.2015
comment
Мое лучшее предположение таково. Вы компилируете с соглашением о вызовах Pascal. Чтобы убедиться, что вы используете C, перейдите в меню Options / Compiler / Entry/Exit Code... и посмотрите на параметр Calling Convention. Вы должны использовать C, но по какой-то причине вы можете выбрать Pascal.   -  person Michael Petch    schedule 20.11.2015
comment
@MichaelPetch Это был C. У вас есть идеи, где я могу найти файл журнала справочной информации или какую-то информацию о компиляторе, кроме той, которую я опубликовал?   -  person Augustine Tighe    schedule 20.11.2015
comment
@M.M, если я удалю #include mpx.h и удалю все, кроме int main() { return 0; } работает нормально, потому что ни с чем не линкуется. каким-то образом все файлы не связываются вместе. И я понятия не имею, как узнать какую-либо информацию журнала или информацию о компиляторе/компоновщике, кроме той, которую я уже опубликовал.   -  person Augustine Tighe    schedule 20.11.2015
comment
@AugustineTighe, вы сказали ранее, что int main() { return 0; } выдает ошибку, теперь вы говорите, что это не так ..   -  person M.M    schedule 20.11.2015
comment
переименование .c в .cpp было бы плохой идеей, это может привести к тому, что IDE вызовет компилятор C++ вместо компилятора C   -  person M.M    schedule 20.11.2015
comment
Чтобы увидеть, как что-то делается, вы можете преобразовать свой PRJ (файл проекта) в файл make с помощью prj2make. Что-то вроде prj2make file.prj file.mak, где file — это имя файла вашего проекта. Обновление вашего вопроса с помощью файла mak может помочь.   -  person Michael Petch    schedule 20.11.2015
comment
Что касается информации о версии, единственное, что я могу придумать, это первые несколько строк tc /h   -  person Michael Petch    schedule 20.11.2015
comment
@M.M Извините, я думал, что понял, что это проблема со связью. Вопрос обновлен.   -  person Augustine Tighe    schedule 20.11.2015
comment
Проблема исчезнет, ​​если вы удалите #include "mpx.h"? (если да, обновите вопрос, чтобы сказать об этом)   -  person M.M    schedule 20.11.2015
comment
@M.M. Я пробовал его файл MPX.H здесь с основным ничего не делать, и он действительно работает.   -  person Michael Petch    schedule 20.11.2015
comment
@MichaelPetch использует тот же компилятор?   -  person M.M    schedule 20.11.2015
comment
Ну, я использую Turbo C 3.00 (у меня установлен Turbo C++ 3.0). OP использует Borland C ++, может быть, не то же самое? Или, может быть, это так. когда я запускаю tc /h, я получаю Turbo C++ Version 3.0   -  person Michael Petch    schedule 20.11.2015