首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用国产库编译错误

用国产库编译错误
EN

Stack Overflow用户
提问于 2013-09-04 22:16:19
回答 3查看 111关注 0票数 0

自从上一次用C写文章以来已经有几年了,所以我确信我得到的错误是非常愚蠢的,所以我彻底地检查了搜索引擎。如果是这样的话,请提前道歉。

我正在编写的程序越来越大,所以我决定将一些基本函数导出到一个自制的库" stackmat.c“中,这是带有两个函数的代码,stackmat.c

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <math.h>
//#include "stackmat.h"

double *stackmat(double *A, int sizeA[2], int dim)
// dim = 0, output is 1 row of sizeA[0] elements
// dim = 1, output is 0 column of sizeA[1] elements
{   double *B;
    int i;
    B = calloc(sizeA[dim],sizeof(double));
    if (dim == 1)           // size sizeA[1]
    {   for (i=0; i<sizeA[0]*sizeA[1]; i++) B[i%sizeA[1]] += A[i];
    }
    else                // size sizeA[0]
    {   for (i=0; i<sizeA[0]*sizeA[1]; i++) B[i/sizeA[1]] += A[i];
    }
    return B;
}

double *SumMat(double *A, double *B, int sizeA[2], int sizeB[2])
{   int i;
    double *C;
    C = calloc(sizeA[0]*sizeA[1],sizeof(double));
    for (i=0; i<sizeA[0]*sizeA[1]; i++) C[i] = A[i] + B[i];
    return C;
}

头堆栈

代码语言:javascript
复制
#ifndef STACKMAT_H_INCLUDED
#define STACKMAT_H_INCLUDED

double *stackmat(double *A, int sA[2], int dim)
double *SumMat(double *A, double *B, int sizeA[2], int sizeB[2])

#endif

和一个简单的调用程序checkslantlib.c

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include "stackmat.h"

void main()
{   double *A, *B;
    int i, sA[2] = {4,3};
    A = malloc(12*sizeof(double));
    for (i=0; i<12; i++)    A[i] = (double) 0.5+i;
    for (i=0; i<12; i++)    printf(" %.1f",A[i]);
    B = stackmat(A,sA,1);
    for (i=0; i<3; i++) printf(" %.1f",B[i]);
}

在用"gcc -c stackmat.c“编译时,一切都很好。但是"gcc checkslantlib.c -o stackmat.o“返回一个我无法理解的错误

代码语言:javascript
复制
checkslantlib.c: In function ‘stackmat’:
checkslantlib.c:6: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
checkslantlib.c:13: error: expected ‘{’ at end of input

如果我在库中包含了头调用,这次是库编译返回了几乎相同的错误。

有人能看出我做错了什么吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-04 22:23:55

函数定义之后缺少分号。

代码语言:javascript
复制
#ifndef STACKMAT_H_INCLUDED
#define STACKMAT_H_INCLUDED

double *stackmat(double *A, int sA[2], int dim);
double *SumMat(double *A, double *B, int sizeA[2], int sizeB[2]);

#endif

编译stackmat.c时不会出现错误,因为#include注释掉了。

票数 0
EN

Stack Overflow用户

发布于 2013-09-04 22:23:31

-o指定输出文件。不管gcc对您现有的stackmat.o做了什么,您需要通过以下操作将stackmat.o包含在遵从性中:

> gcc checkslantlib.c stackmat.o -o checkslantlib

或者在编译和编译中

> gcc checkslantlib.c stackmat.c -o checkslantlib

票数 1
EN

Stack Overflow用户

发布于 2013-09-04 22:26:44

这两个文件应分别编译:

gcc -c stackmat.c生产stackmat.o

gcc -c checkslantlib.c生产checkslantlib.o

然后将它们链接到一起以生成最终的可执行文件:

gcc -o myprogram checkslantlib.o stackmat.o

也可以检查其他答案和注释中提到的缺失分号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18624696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档