c语言 - 我在编译时在 MYSYS2 中使用 gcc 设置了 rpath,但程序在运行时找不到它,为什么呢?



在我的工作目录中,有main.c和一个名为lib的文件夹,其中包含libtest.dll

我使用

$ gcc main.c -ltest -L ./lib -Wl,-rpath=./lib

编译,编译过程没问题(没有警告和错误)。但是当我运行 a 时.exe系统会提醒

D:/MYSY2/home/user/code/a.exe:加载共享库时出错:libtest.dll:无法打开共享对象文件:没有这样的文件或目录

那么为什么编译时可以找到库,而运行时找不到库呢?

Windows 上的共享库是.dll文件,通过查找与正在运行的.exe文件位于同一文件夹中来定位,或者如果这不起作用,则通过查找PATH环境变量指定的位置来定位。

因此,最好的解决方案是将.dll文件复制到与.exe文件相同的位置。

对于应用程序的分发,您可以使用copypedeps -rfrom https://github.com/brechtsanders/pedeps 复制.exe文件以及任何依赖项.dll文件,以防您不确定需要哪些文件。

相关内容

最新更新