Линкер gcc компоновщик проблемы с программой C - PullRequest
2 голосов
/ 12 ноября 2009

Я пытаюсь скомпилировать программу c, которая содержит заголовок в .c файлах. но только 1 из .c файлов действительно использует определенную переменную в заголовочном файле. Вот пример кода, который вызовет проблему компоновщика. Я пытаюсь, чтобы мой заголовочный файл содержал глобальные переменные, которые используются 2 разные .c файлы ... Любая помощь будет оценена. спасибо.

tmp1.h file

#ifndef TMP1_H_1
#define TMP1_H_1

double xxx[3] = {1.0,2.0,3.0};

#endif

tmp1.c file

#include "tmp1.h"

void testing()
{
  int x = 0;
  x++;
  xxx[1] = 8.0;
}

файл main1.c

#include <stdio.h>
#include "tmp1.h"

int main()
{
 printf("hello world\n");
}

Ответы [ 3 ]

5 голосов
/ 12 ноября 2009

Проблема в том, что вы инициализируете переменную в заголовочном файле, поэтому вы получаете повторяющиеся символы. Вам необходимо объявить double xxx с ключевым словом extern, а затем инициализировать его в любом файле .c.

Вот так:

#ifndef TMP1_H_1
#define TMP1_H_1

extern double xxx[3];

#endif

А потом в одном из .c файлов:

double xxx[3] = {1.0,2.0,3.0};
1 голос
/ 12 ноября 2009

Не помещайте код в заголовочные файлы, это рецепт ошибок компоновщика с «множественным определением символа». Поместите ссылку extern на вашу глобальную переменную в заголовочный файл, а затем определите фактическую глобальность в одном из ваших файлов C (или даже в новом).

0 голосов
/ 12 ноября 2009

положить extern для xxx и определить xxx в файле .c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...