使用其他文件夹中的对象动态编译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的主要内容,如果未能解决你的问题,请参考以下文章