无法执行动态链接的程序

标签 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)来生成静态文件 目标文件 calc_mean.o 中的库(名为 libmean.a)

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

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

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

如何执行动态链接的程序?

最佳答案

您的最后一行建议您在 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)只是程序链接期间使用的 stub ,据我所知 MinGW 不需要它,但其他编译器可以。

链接你的主程序应该使用相同的命令:

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

对于在Windows中查找.dll库,没有LD_LIBRARY_PATH——Windows只是在标准搜索路径中查找它们,包括的目录>.exe 需要它。 IOW,您应该能够运行您的程序。

关于无法执行动态链接的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44182446/

相关文章:

java - 查找进程是否在 Windows 中处于 Activity 状态

batch-file - cmd命令以数字顺序转储文件列表

c++ - 应用编译器选项 -00 与 -03 在 clang 上调用 malloc 的不同输出

c - 使用 printf scanf 进行 STDIN、STDOUT 重定向挂起

c - 如何创建一个新线程

c - 我的c代码有什么错误?

cmd - 复制/a 和复制/b 之间的区别

c++ - 在库的情况下对函数的 undefined reference

python - 在cmd中将参数传递给.exe文件

batch-file - 命令 : not evaluating variables inside a loop