2016-02-23 108 views
1

的代码库:动态链接库中找不到-lmean

calc_mean.c

//#include <stdio.h> 

double mean(double a, double b) { 
    return (a+b)/2; 
} 

头文件:

calc_mean.h

使用库的程序:

main.c中

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

int main(int argc, char* argv[]) { 

    double v1, v2, m; 
    v1 = 5.2; 
    v2 = 7.9; 

    m = mean(v1, v2); 

    printf("The mean of %3.2f and %3.2f is %3.2f\n", v1, v2, m); 

    return 0; 
} 

我创建使用以下命令静态库:

gcc -c calc_mean.c -o calc_mean.o 
ar rcs libmean.a  calc_mean.o 

链接对静态库:完全没有问题,只要

gcc -static main.c -L. -lmean -o statically_linked 

一切正常,其静态库.. 。

现在这些是我用来创建共享的命令库:

gcc -c -fPIC calc_mean.c -o calc_mean.o 
gcc -shared -Wl,-soname,libmean.so.1 -o libmean.so.1.0.1 calc_mean.o 

当我进入linkng命令

gcc main.c -o dynamically_linked -L. -lmean 

我收到错误消息无法找到-lmean LD返回1退出状态

连接错误的信息在这里这两个命令后

enter image description here

可以有人给我在C中创建DLL的步骤吗?

回答

1

这是因为您正在创建一个名为libmean.so.1.0.1的文件,但您要求链接器链接libmean.so(这是-lmean扩展到的内容)。

您需要一个符号链接libmean.so指向libmean.so.1.0.1

+0

gcc -c -fPIC calc_mean.c -o calc_mean.o gcc -shared -Wl,-soname,libmean.so.1 -o libmean.so.1.0.1 calc_mean.o代替这个,我用这些命令gcc -c -fPIC calc_mean.c -o calc_mean.o gcc -shared -Wl,-soname,libmean.so -o libmean.so calc_mean.o但是仍然收到相同的错误 – Savn

+0

@Savn,不能。 – SergeyA

+0

上午使用WIN7 .... – Savn

-1

您是否将libmean.so.1复制到/ usr/lib /(或)/ opt/lib /中?

+0

没有帮助。错误的答案。 – SergeyA

1

当您尝试通过提供-lmean来链接库时,它会自动搜索libmean.so,但是您创建的库为libmean.so.1.0.1。这就是问题。请更改库名称或创建符号链接。

+0

gcc -c -fPIC calc_mean.c -o calc_mean.o gcc -shared -Wl,-soname,libmean.so.1 -o libmean.so.1.0.1 calc_mean.o代替这个,我用了这些命令gcc -c -fPIC calc_mean.c -o calc_mean。o gcc -shared -Wl,-soname,libmean.so -o libmean.so calc_mean.o但仍然收到相同的错误 – Savn