使用其他文件夹中的对象动态编译gcc

时间:2018-02-08 16:07:21

标签: c gcc include dynamic-programming

我正在开发一个带有ordeneted使用文件夹的项目。我想要一个名为/ bin的文件夹来存储所有二进制文件和一个名为/ src的文件夹,其中包含所有.c和.h文件。

程序将解决方程组,所有与矩阵计算相关的函数都将动态编译。

我有这个文件夹:

/ project / src / matrixlib(它将是所有矩阵计算的动态lybrary)

使用文件:

matrix.c

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


int matrix_alloc(int n, int m, Matrix *matrix);
{
//do whatever, this is not the problem
}

matrix.h

#ifndef matrix_h__
#define matrix_h__

struct Matrix
{
//definition here
};typedef struct Matrix Matrix;

extern int matrix_alloc(int, int, Matrix*);
#endif //matrix_h__

我用以下代码编译此文件夹:

gcc -c -Wall -Werror -fpic matrix.c

gcc -shared -o libmatrix.so matrix.o

然后我有文件夹:

/项目/ SRC /主

使用文件:

main.c(使用函数“matrix_alloc”并包含“matrix.h”)

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

int main(void)
{
    Matrix matrix;
    matrix_alloc(3,3,&matrix);
    return 0;
}

我编译如下:

gcc -I/project/src/matrixlib -L/project/src/matrixlib -Wl,-rpath=/project/src/matrixlib -Wall main.c -o  main

但我有这个错误:

/tmp/cc8kLMIe.o: In function `main':
main.c:(.text+0x34): undefined reference to `matrix_alloc'
collect2: error: ld returned 1 exit status

但我真的不明白发生了什么,因为matrix_alloc在matrix.h文件夹中。

你能帮我吗?

由于

1 个答案:

答案 0 :(得分:0)

您未将libmatrix.so与您的计划相关联。将-lmatrix添加到编译器调用