无法执行动态链接的程序

时间:2017-05-25 13:58:53

标签: c cmd

您好我尝试使用gnu编译器执行静态库和共享库,这里是代码

以下是该库的代码     calc_mean.c

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

以下是我的头文件calc_mean.h

double mean(double,double);

现在我开始使用以下命令创建静态库

首先,将calc_mean.c转换为目标文件

gcc -c calc_mean.c -o calc_mean.o

第二,调用归档器(ar)以产生静态 库(名为libmean.a)来自目标文件calc_mean.o

ar rcs libmean.a calc_mean.o

第三,在使用-fPIC选项之前创建了共享库 创建了一个独立的代码,这是共享库

所必需的
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

最后我使用该库的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;
 }

最后我将程序链接到生成statically_linked.exe的静态库

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

动态链接时,它使用以下命令生成dynamic_linked.exe

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

现在,当我使用命令使用以下命令执行动态链接程序时,Iam收到一条错误消息,指出LD_LIBRARY未被识别为内部或外部命令,可运行程序或批处理文件

LD_LIBRARY_PATH=.D:\c\project3./dynamically_linked

如何执行动态链接程序?

1 个答案:

答案 0 :(得分:0)

你的最后一行表明你在Windows上做了这一切。但是您似乎已经按照Linux或其他* nix平台的分步指南进行了操作。

在Windows上,动态链接的库是.dll格式(不是.so),并且没有版本控制约定,因此创建共享库的命令应该看起来有点不同。

而不是:

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

在Windows上执行以下操作:

gcc -shared -Wl,--out-implib,libmean.dll.a -o mean-1.dll calc_mean.o

这将创建名为mean-1.dll的库本身以及名为libmean.dll.a导入库。 Windows平台上的导入库(有时称为.lib而不是.dll.a)只是在程序链接过程中使用的存根,AFAIK MinGW不需要它,但其他编译器可以。

然后,链接主程序应该使用相同的命令:

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

为了在Windows中查找.dll库,没有LD_LIBRARY_PATH - 窗口只在标准搜索路径中查找它们,包括需要它的.exe目录。 IOW,你应该能够运行你的程序。