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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用其他文件夹中的对象动态编译gcc相关的知识,希望对你有一定的参考价值。

我正在开发一个带有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文件夹中。

请问你能帮帮我吗?

谢谢

答案

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

以上是关于使用其他文件夹中的对象动态编译gcc的主要内容,如果未能解决你的问题,请参考以下文章

GCC/MingW 在不同版本上编译

gcc找不到静态库中的函数

是否可以动态编译和执行 C# 代码片段?

如何使用导航架构组件修复动态功能模块中片段的发布版本中的ClassNotFoundException?

C程序存储结构

静态库与动态库