[英]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.