簡體   English   中英

linux gcc鏈接器問題與C程序

[英]linux gcc linker problems with C program

我正在嘗試編譯包含.c文件頭的ac程序。 但是.c文件中只有1個確實在使用頭文件中的已定義變量。 這是一些示例代碼,將產生鏈接器問題。 我正在嘗試讓我的頭文件包含由2個不同的.c文件使用的全局變量...任何幫助將不勝感激。 謝謝。

tmp1.h文件

#ifndef TMP1_H_1
#define TMP1_H_1

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

#endif

tmp1.c文件

#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");
}

問題是您要在頭文件中初始化變量,因此會得到重復的符號。 您需要使用extern關鍵字聲明double xxx ,然后在任一.c文件中對其進行初始化。

像這樣:

#ifndef TMP1_H_1
#define TMP1_H_1

extern double xxx[3];

#endif

然后在一個.c文件中:

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

不要將代碼放在頭文件中,這是“多重定義的符號”鏈接器錯誤的誘因。 在頭文件中放置一個對全局變量的extern引用,然后在一個C文件(甚至一個新文件)中定義實際的全局變量。

將extern設置為xxx並在.c文件中定義xxx。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM