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

问题描述 投票:0回答:1

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

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

我有这个文件夹:

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

有文件:

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文件夹中。

请问你能帮帮我吗?

谢谢

c gcc include dynamic-programming
1个回答
0
投票

你没有将libmatrix.so与你的程序联系起来。将-lmatrix添加到编译器调用中

© www.soinside.com 2019 - 2024. All rights reserved.