2015-06-22 4 views
-2

Я написал программу c, которая имеет 3 файла (.c), у главной программы есть два потока и один файл имеет функцию подключения mysql, один файл имеет определение функций потоков. Я не знаю, как собрать все эти код, Обычно я пытался, как это,скомпилировать несколько исходных файлов в c

cc -pthread main.c 

Но если я компилирую, как это я получаю ошибку называется MySQL функция неопределенна Но я написал нить как отдельная программа и mysql в качестве отдельной программы и выполнялся индивидуально, он успешно выполнил и получил выход. Поэтому, пожалуйста, помогите мне собрать мои названия проекта Файловые,

main.c (2 нити объявившего) functions.c (функция потока определение и MySQL FUNC объявившего) db.c (MySQL функция определение)

пожалуйста, помогите компилировать мой код?

+1

Добро пожаловать в Stack Overflow! Просьба уточнить вашу конкретную проблему или добавить дополнительные сведения, чтобы точно указать, что вам нужно.Как написано в настоящее время, трудно (читайте как ** невозможно **), чтобы сказать ___exactly___ то, что вы просите. См. Страницу [Ask] для получения помощи в разъяснении этого вопроса. –

+0

Если вы пытаетесь объединить три отдельные программы, которые каждый компилирует и (вы подразумеваете) запускаете индивидуально, вы должны перестроить свой код и использовать файлы заголовков '.h', чтобы поделиться своими определениями. Маловероятно, что файлы модулей, составляющие часть целого, будут компилироваться и выполняться отдельно. –

+0

Кроме того, пожалуйста, приучите себя не только предоставить существенные детали, но и не добавлять шум с бесполезными деталями. Например, совершенно неважно, что ваша программа имеет 2 потока или использует mysql и т. Д. Вы обнаружите, что, когда вы думаете о своей проблеме достаточно, чтобы создать краткий надлежащий вопрос, вы лучше поймете свою ситуацию. – mah

ответ

1

Немного сложно понять, что вам нужно, но я могу сказать вам, что вы заявили, что вам нужно будет включить определенные библиотеки в ваш компилятор, который вы в настоящее время не используете. Кроме того, флаг -l должен префикс ваших библиотек.

попробовать что-то вроде этого:

gcc -lpthread main.c functions.c db.c -o main $(mysql_config --libs) 

Объяснить, mysql_config --libs возвращает все библиотеки конфигурации, необходимые для запуска MySQL DDL в программе C.

Учитывая ваши обновления в ваших объявлениях файлов, я предполагаю, что вы программист на Java. C не является Java. Если вы объявляете функции, которые вы собираетесь использовать только один раз в main.c, вы должны поместить их внутри main.c, если вам не нужны они для переноски.

+0

У него есть два дополнительных файла-источника ... 'functions.c' и' db.c'. Хотя он мог просто добавить их к единственной команде, которую вы ему дали, и, вероятно, это будет ссылка, это не поможет в долгосрочной перспективе. – mah

+0

Он отредактировал, чтобы добавить два дополнительных файла источника после того, как я отправил свой ответ. Обновление сейчас – 99ProblemsAndTheyreAllCode

+0

Спасибо за вашу помощь. Но я пробовал метод компиляции. Если есть способ, используя файл make ???? –

2

У вас есть два основных варианта при компиляции нескольких .c файлов:

Вариант 1)

cc file1.c file2.c file3.c -o executable_name

Преимущества: простой

Недостаток: если все, что вы изменить один файл вы перекомпиляция всех файлов

Вариант 2)

cc file1.c -c -o file1.o 
cc file2.c -c -o file2.o 
cc file3.c -c -o file3.o 
cc file1.o file2.o file3.o -o executable_name 

Преимущество: Если изменить один файл, который вы не должны перекомпилировать

Недостатки: Несколько команд (но вы должны использовать Makefile в этой точке)

Флаг -c сообщает компилятору compiler but not link , Вы не хотите ссылаться, поскольку вы не скомпилировали все ваши файлы. Окончательный вызов cc связывает все .o файлов в исполнителе executable_name

Смежные вопросы