【发布时间】:2012-11-21 02:56:43
【问题描述】:
我在使用 gcc 编译 C 中的单独模块时遇到问题:
基本上,我有我的标题,common.h:
#ifndef COMMON_M
#include<stdio.h>
#define COMMON_M
void print_array(int *a,int n);
void swap(int *v,int i,int j);
#endif
我的functions.c上面的函数实现:
#include "common.h"
void print_array(int *a,int n) {
int i=0;
for(;i<n;++i)
printf( (i==n-1) ? "%d\n" : "%d ", a[i]);
}
void swap(int *v,int i,int j) {
int t=v[i];
v[i]=v[j];
v[j]=t;
}
和我的主要:
#include "common.h"
void main() {
int a[10]={6,2,0,12,4,3,7,-4,12,7};
print_array(a,10);
qsort_c(a,0,10);
print_array(a,10);
}
如果我尝试将 funcionts.c 编译为模块 ( gcc -c functions.c ) 我会收到此错误:
错误:重新定义“交换” 错误:“print_array”的重新定义
有人能帮我理解为什么吗? 我在 common.h 中声明一个函数并在 functions.c 中定义它!我不明白为什么这在理论上不起作用。
提前致谢,
【问题讨论】:
-
这些是您要编译的确切文件吗?使用 GCC 4.2 对我来说效果很好(我刚刚尝试过)
-
您显示的来源不会出现此错误。必须有一些不同的东西,无论是源代码还是编译或链接步骤。
-
@Vyktor:
-c告诉 GCC不 链接。 -
@netcoder 不知何故我觉得他在混淆编译和链接
-
尝试从标题中的函数声明中删除变量名,并将
extern添加到声明中。
标签: c module compilation linkage